"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
是什么意思?这是否意味着只有一个具有数值 32
的 long
变量,或者它意味着 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
类型的整数常量。
32L
是 long
. 类型的整数常量
为什么区分这两种类型很重要?规则如下:
int
常量不得超过 int
的范围,即从 -2147483648 到 2147483647(含)。超出此范围的值会触发编译错误,例如 4123456789
.
一个long
常数不能超过long
的范围,这是一个更大的范围。
当一个long
常量赋给一个long
变量时,很简单,没有什么特别的事情发生。例如:long val = 32L;
当 int
常量分配给 long
变量时,int
值会通过 Java整数转换规则——也就是说是signed-extended从32位到64位。在这种情况下,(long)32
与 32L
完全相同,因此 long val = 32;
做同样的事情。
但是,有些情况具有欺骗性:int
常量 0xFFFFFFFF
与 long
常量 不相等 0xFFFFFFFFL
。这是因为由于符号扩展,将 0xFFFFFFFF
转换为 long
得到 0xFFFFFFFFFFFFFFFFL
。
我在这里找到了代码片段
public static final long USER_ACCOUNT = 32L;
这里的32L
是什么意思?这是否意味着只有一个具有数值 32
的 long
变量,或者它意味着 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
类型的整数常量。 32L
是long
. 类型的整数常量
为什么区分这两种类型很重要?规则如下:
int
常量不得超过int
的范围,即从 -2147483648 到 2147483647(含)。超出此范围的值会触发编译错误,例如4123456789
.一个
long
常数不能超过long
的范围,这是一个更大的范围。当一个
long
常量赋给一个long
变量时,很简单,没有什么特别的事情发生。例如:long val = 32L;
当
int
常量分配给long
变量时,int
值会通过 Java整数转换规则——也就是说是signed-extended从32位到64位。在这种情况下,(long)32
与32L
完全相同,因此long val = 32;
做同样的事情。但是,有些情况具有欺骗性:
int
常量0xFFFFFFFF
与long
常量 不相等0xFFFFFFFFL
。这是因为由于符号扩展,将0xFFFFFFFF
转换为long
得到0xFFFFFFFFFFFFFFFFL
。