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

同样的机制去IntegerByte实例。但是龙的作品完全不同。以下代码给出了编译时错误

Long l = 10;

Long对长类型使用自动装箱方法,因此

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,并且常量表达式的值可表示为变量的类型,则可以使用缩窄的原始转换。
  • 如果变量的类型是:

    • 字节和常量表达式的值可以在类型字节中表示。
    • 短,常量表达式的值可以用短类型表示。
    • 字符和常量表达式的值可以用char“类型表示。

因此,所有<= 32bit的原语都可以轻松地进行转换,而长(64bit)则需要特殊的转换。这似乎是不合逻辑的。

照常,所有不合逻辑的事情都可以解释Java的向后兼容性或历史演变。例如,从1.0版开始,java中就存在Integer和Long类。从1.1开始,java中就存在Short和Byte类。即在起点处整数可以是两种类型:整数或长整数。因此,我认为这两种数字有不同的转换规则。然后添加了short和byte。我想short和byte在具体的JVM中可以有32位实现。

以上是 Java:为什么我不能将int转换为Long 的全部内容, 来源链接: utcz.com/qa/407315.html

回到顶部