为什么从int到Long的隐式转换不可能?
我可以隐式地将int转换为long和long to 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
是对象。 拳击/拆箱仅适用于基元。 做Long boxedLong = i
就像Long boxedLong = new Integer(10)
,这是不行不! 另外,请记住Long
和Integer
之间没有inheritance,所以即使Integer i = new Long()
也无效
在这种情况下,我在long和Long之间看到的最大区别是Long可能为null。 如果有可能您可能缺少值,则Long对象将有用,因为null可以指示缺失值。 如果你正在使用原语,你将不得不使用一些特殊的值来表示缺失,这可能会是一团糟。 速度或大小不太可能是一个问题,除非你计划制作一百万个这样的东西,然后序列化。 ( 什么时候在java中使用Long vs long? )
事实上,没有实际的理由。 除了int
是基元, long
是原始的,但Long
不是。
我建议你使用Long.valueOf()
像这样:
Long longValue = Long.valueOf(InsertIntHere);
拳击只适用于基元。 这就是为什么。
试试这个: Long.valueOf(int);
文档