Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么从int到Long的隐式转换是不可能的?_Java - Fatal编程技术网

Java 为什么从int到Long的隐式转换是不可能的?

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转换为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
是对象。装箱/取消装箱仅适用于基本体。 执行
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在本文中,对象隐式地表示类;)。