为什么从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 

LongInteger是对象。 拳击/拆箱仅适用于基元。 做Long boxedLong = i就像Long boxedLong = new Integer(10) ,这是不行不! 另外,请记住LongInteger之间没有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);

文档