java中的所有数字应该是int类型.
以下行在 Java> 1.5中是合法的
以下行在 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之间的区别.
问题是将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位的实现.