Java 为什么从int到Long的隐式转换是不可能的?
我可以隐式地将int转换为long和long转换为long。为什么不能将int隐式转换为Long?为什么Java不能在示例的最后一行进行隐式转换Java 为什么从int到Long的隐式转换是不可能的?,java,Java,我可以隐式地将int转换为long和long转换为long。为什么不能将int隐式转换为Long?为什么Java不能在示例的最后一行进行隐式转换 int i = 10; //OK long primitiveLong = i; //OK Long boxedLong = primitiveLong; //OK boxedLong = i; //Type mismatch: cannot convert from int to Long Long和Integer是对象。装箱/取消装箱仅适用于
int i = 10; //OK
long primitiveLong = i; //OK
Long boxedLong = primitiveLong; //OK
boxedLong = i; //Type mismatch: cannot convert from int to Long
Long
和Integer
是对象。装箱/取消装箱仅适用于基本体。
执行Long-boxedLong=i
就像Long-boxedLong=new Integer(10)
,这是一个禁忌!
另外,请记住,
Long
和Integer
之间没有继承关系,因此即使是Integer i=new Long()
也是无效的装箱只适用于原语。这就是为什么
试试这个:Long.valueOf(int)代码>
在此上下文中,我看到long和long之间的最大区别是long可能为null。如果有可能缺少值,那么长对象将很有帮助,因为null可能表示缺少值。如果您使用的是原语,那么必须使用一些特殊的值来表示缺少,这可能会造成混乱。速度或大小不太可能是一个问题,除非您计划制作一个包含一百万个这些内容的数组,然后序列化。()
事实上,没有实际的理由。除了int
是原语外,long
是原语,但long
不是
我建议您使用Long.valueOf()
所以像这样:
Long longValue = Long.valueOf(InsertIntHere);
这是因为自动装箱从其对象
到其原始类型有一对一的关系。除了语言设计者决定不支持这一点之外,可能没有真正的原因。您可以使用boxedLong=(long)i
@CachoSanta在本文中,对象隐式地表示类;)。