“public static final long USER_ACCOUNT = 32L”是什么意思?什么后缀L在长变量中意味着什么?

时间:2016-01-12 06:16:45

标签: java literals

我在这里找到了代码段

public static final long USER_ACCOUNT = 32L;

这意味着什么32L?它是否意味着只有一个long变量具有数值32,或者它意味着long将需要32位值?

如果我没有提供后L数字结尾32怎么办?

3 个答案:

答案 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)

让我们说清楚:

  • 在Java中,32int类型的整数常量。
  • 32Llong类型的整数常量。

为什么区分这两种类型很重要?以下是规则:

  • int常量不得超过int的范围,即-2147483648到2147483647(含)。超出此范围的值会触发编译错误,例如4123456789

  • long常数不得超出long的范围,这是一个更大的范围。

  • long常量分配给long变量时,它很简单,没有什么特别的事情发生。例如:long val = 32L;

  • int常量分配给long变量时,int值将通过Java整数转换规则转换为long值 - 表示它是从32位到64位的符号扩展。在这种情况下,(long)3232L完全相同,因此long val = 32;执行相同的操作。

  • 但是,有些案例具有欺骗性:int常量0xFFFFFFFF 不等long常量0xFFFFFFFFL。这是因为由于符号扩展,将0xFFFFFFFF转换为long会产生0xFFFFFFFFFFFFFFFFL