Java长整型数据类型

5

你是否需要将Long变量定义为

Long myUserId = 1L;

为什么不能直接使用Long myUserId = 1;


4
好的,你自己已经回答了第一个问题。 - Dominic K
我猜你可以分配“1”(或任何“int”值编译时表达式),编译器会进行强制转换来执行分配。 - Ira Baxter
@IraBaxter:它将执行扩展转换(从int到long),但之后不会执行自动装箱。 - Thilo
请查看以下网址:https://dev59.com/_XRA5IYBdhLWcg3w9irq.. 它有解释。 - Josnidhin
@Thilo:我错过了“Long”和“long”的区别。 - Ira Baxter
2个回答

8
Long myUserId = 1;   // error

由于1是一个整数,所以这个方法不能正常工作。

它将被自动装箱为:

Integer myUserId = 1;   // ok

它还将被扩展到:
long myUserId = 1;      // also ok

但不能两者兼备。

所以,是的,你必须说

Long myUserId = 1L;  

这是一个可以自动装箱为 Long 类型的 long

至于为什么它会这样工作(或者说在这种情况下不起作用):很可能是因为自动装箱是后来添加的(在Java5中),必须绝对保持向后兼容。这限制了他们能够使其变得“平滑”的程度。


1
因为否则,Java 会将所有数值类型默认为整数(Integer)。
唯一允许将 "1L" 赋给 Long 类型(而不是原始类型 long)的原因是自 Java 5 引入了“自动装箱”(auto-boxing)。
如果没有 "1L",在幕后,它看起来像下面这样(没有 "L"):
Long myUserId = Integer.valueOf(1);

...我希望这显然是可以解释的。:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接