我在这里找到了代码段
public static final long USER_ACCOUNT = 32L;
这意味着什么32L
?它是否意味着只有一个long
变量具有数值32
,或者它意味着long将需要32位值?
如果我没有提供后L
数字结尾32
怎么办?
答案 0 :(得分:3)
在Java中编写长文字时需要“L”后缀。 (您可以使用小写“l”,但这很容易被误读为一个。)长常量存储为64位二进制补码值。如果没有“L”,它就会成为一个整体;但在这种情况下,它会得到相同的结果。
以下链接[http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html]到Oracle Java文档中的一个简短页面,该文章对此文章进行了扩展。页面的第一部分讨论了Java数据类型以及每种类型占用的内存量,页面的下一部分讨论了如何为每种不同的数据类型编写Java文字。
答案 1 :(得分:2)
是的,这是一个很长的常数, L (资本L)只是一个后缀。
Java规范允许使用大写和小写后缀,但是大写的大写字母是优选的,因为大写字母L不容易与数字1混淆而不是小写字母l。
您可以获得有关Java规范here的更多信息。
答案 2 :(得分:1)
让我们说清楚:
32
是int
类型的整数常量。32L
是long
类型的整数常量。为什么区分这两种类型很重要?以下是规则:
int
常量不得超过int
的范围,即-2147483648到2147483647(含)。超出此范围的值会触发编译错误,例如4123456789
。
long
常数不得超出long
的范围,这是一个更大的范围。
当long
常量分配给long
变量时,它很简单,没有什么特别的事情发生。例如:long val = 32L;
当int
常量分配给long
变量时,int
值将通过Java整数转换规则转换为long
值 - 表示它是从32位到64位的符号扩展。在这种情况下,(long)32
与32L
完全相同,因此long val = 32;
执行相同的操作。
但是,有些案例具有欺骗性:int
常量0xFFFFFFFF
不等至long
常量0xFFFFFFFFL
。这是因为由于符号扩展,将0xFFFFFFFF
转换为long
会产生0xFFFFFFFFFFFFFFFFL
。