Cam*_*sen 14 java integer literals
我很困惑为什么Java整数文字默认int代替long.这似乎造成了不必要的混淆.
首先,它要求程序员在为long超过最大int大小的值(2147483647)分配值时采用特殊语法(将"L"附加到文字).
long x = 2147483647; // Compiles
long y = 2147483648; // Does not compile
long z = 2147483648L; // Compiles
Run Code Online (Sandbox Code Playgroud)
其次,当使用Long包装类时,程序员必须始终使用long文字符号,如本SO问题中所述.
Long x = 250; // Does not compile
Long y = 250L; // Compiles
Run Code Online (Sandbox Code Playgroud)
第三,考虑到从int文字到"较窄"数据类型(short和byte)的隐式转换在所有情况下(我知道)都可以正常工作,似乎简单地制作所有整数文字类型long将是明显的解决方案...... ?在特殊情况下,这不会完全消除对整数文字附加"L"的奇怪系统的需要吗?
小智 7
此行为是设计1,并在JLS:Java语言规范中编写.
首先,请注意,这是不相关的加宽这就是为什么(有效)整数文本提升为长期的价值.相反,这与int literal的规范有关:
如果十六进制,八进制或二进制int文字不适合32位,则为编译时错误.
最小和最大的带符号32位整数值分别为-2147483648和2147483647.
1我不关心为什么它以这种方式工作,而像C#这样的语言有不同的规则.