Java:为什么我不能将int转换为Long

前端之家收集整理的这篇文章主要介绍了Java:为什么我不能将int转换为Long前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
java中的所有数字应该是int类型.
以下行在 Java> 1.5中是合法的
Short s = 1; // Will compile to Short s = Short.valueOf((short)1) - thus you can't exceed short max value i.e.
Short s =  4444; // is invalid for autoBoxing

相同的机制用于整数和字节实例化.但Long的作品完全不一样.以下代码给出编译时间错误

Long l = 10;

长时间使用相同的方法自动装箱长型,所以

Long l = 10L; //is valid and is translated into Long.valueOf(10L)

我看不到为什么int不能分配给Long变量.对这件事有什么想法?

解决方法

我认为这个问题并不是关于一般铸造原始和包装物.
问题是将int转换为java.lang.Long和int到java.lang.Short之间的区别.

JLS:
“另外,如果表达式是byte,short,char或int类型的常量表达式(§15.28):

>如果变量的类型为byte,short或char,则可以使用变窄的原语转换,并且常量表达式的值可在变量的类型中表示.
>如果变量的类型为:可以使用缩进的原语转换,然后进行拳击转换

>字节和常量表达式的值可以在类型字节中表示.
> Short和常量表达式的值可以在类型short中表示.
>字符和常量表达式的值可以在类型char“中表示.

因此,所有< = 32位元素可以轻松地投射(64位),需要特殊的投射.
这似乎是不合逻辑的.

像往常一样的不合逻辑的事情在java的落后兼容性或历史演变中都有解释.例如. Class Integer和Long从1.0版本开始就存在于java中. Class 1.1中存在Java和Java类.那就是起点整数可以是两种类型:整数或长.所以我认为这两种类型的数字有不同的投射规则.然后添加短和字节.我想短和字节可以在具体的JVM中有32位的实现.

猜你在找的Java相关文章