Я запутался, почему Java integer литералы по умолчанию int
вместо long
. Это, по-видимому, вызывает ненужную путаницу.
Во-первых, это требует от программиста специального синтаксиса (добавьте "L" к литералам) при назначении значения long
, которое превышает максимальный размер int
(2147483647).
long x = 2147483647; // Compiles
long y = 2147483648; // Does not compile
long z = 2147483648L; // Compiles
Во-вторых, при использовании класса-оболочки long
программист должен всегда использовать литеральную литературу long
, как описано в этом вопросе SO.
Long x = 250; // Does not compile
Long y = 250L; // Compiles
В-третьих, учитывая, что неявное преобразование из int
литералов в "более узкие" типы данных (short
и byte
) отлично работает во всех ситуациях (что я знаю), кажется, что просто сделать все целое число литературный тип long
был бы очевидным решением... верно? Разве это не полностью устранит необходимость в этой нечетной системе добавления "L" к целочисленным литералам в особых случаях?