Java:为什么可以';我不能把int转换为Long吗
Java中的所有数字都应该是int类型。 以下行在Java>1.5中是合法的Java:为什么可以';我不能把int转换为Long吗,java,primitive-types,Java,Primitive Types,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
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对长类型的自动装箱使用相同的方法,因此
Long l = 10L; //is valid and is translated into Long.valueOf(10L)
我不明白为什么int不能分配给长变量。对此有什么想法吗?因为第一个大写字母的Long是一个包装类,而不是原始类型
看看。您可以将
int
转换为long
和long
转换为long
但是您不能将
int
转换为Long
写
longl=(Long)10是正确的代码>我认为问题不在于一般地铸造原语和包装器。
例如,问题在于将int转换为java.lang.Long和int转换为java.lang.Short之间的区别
JLS:
此外,如果表达式是byte、short、char或int类型的常量表达式(§15.28):
- 如果变量的类型是byte、short或char,并且常量表达式的值可以在变量的类型中表示,则可以使用窄化原语转换
- 如果变量类型为:
- 字节,常量表达式的值可在字节类型中表示
- Short,常量表达式的值可在Short类型中表示
- 字符和常量表达式的值可在“char”类型中表示
均1,新长(intValue)
2,长值of(intValue)
是的,我知道Long是包装类型,int是原语。问题在于自动装箱本身。为什么编译器不使Long l=Long.valueOf(1);或长l=新长(1);虽然它可以对Short和Byte包装类型执行此操作,“java中的所有数字都应该是int类型。”…什么?实际上,我的意思是:如果您编写somevar=10,那么对于语句Byte a=10,它实际上会变成Byte a=(Byte)10,其中10实际上是int类型Short
也是一个包装类。这并不能解决行为上的差异。但您可以通过这种方式分配Short
。问题是:为什么会有差异?这不是强制转换,而是通过向构造函数发送int值来创建新变量。最好不要创建新对象,而不是像这样构造新对象,您可以强制转换为原语long:(long)intValue