"public static final long USER_ACCOUNT = 32L" 是什么意思? long 变量中的后缀 L 是什么意思?

what does "public static final long USER_ACCOUNT = 32L" means? what suffix L means in long variable?

我在这里找到了代码片段

public static final long USER_ACCOUNT = 32L;

这里的32L是什么意思?这是否意味着只有一个具有数值 32long 变量,或者它意味着 long 将采用 32 位值?

如果我不提供后面的 L 数字结尾 32 怎么办?

是的,它是一个长常数,L(大写的L)只是一个后缀。

Java 规范允许使用大写和小写后缀,但对于长整数,大写版本是首选,因为与小写 l 相比,大写 L 更不容易与数字 1 混淆。

您可以获得有关 Java 规格的更多信息 here

在 Java 中写入长文字需要 "L" 后缀。 (您可以使用小写字母 "l",但这很容易被误读为一个。)长常量存储为 64 位 two's-complement 值。没有 "L" 它将是一个 int 文字;但在这种情况下,它会给出相同的结果。

这里有一个 link [http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html] 到 Oracle Java 文档中的一个简短页面,该文档对此 post 进行了扩展。该页面的第一部分讨论 Java 数据类型以及每种类型占用多少内存,页面的下一部分讨论如何为每种不同的数据类型编写 Java 文字。

让我们说清楚:

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

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

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

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

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

  • int 常量分配给 long 变量时,int 值会通过 Java整数转换规则——也就是说是signed-extended从32位到64位。在这种情况下,(long)3232L 完全相同,因此 long val = 32; 做同样的事情。

  • 但是,有些情况具有欺骗性:int 常量 0xFFFFFFFFlong 常量 不相等 0xFFFFFFFFL。这是因为由于符号扩展,将 0xFFFFFFFF 转换为 long 得到 0xFFFFFFFFFFFFFFFFL