使用Object
类型对象进行自动装箱是有效的,但它不能用于取消装箱。它背后的原因是什么?我的意思是不使用对象类型对象的拆箱功能。是否有任何特殊原因来实现此行为。因为它支持自动装箱但不支持拆箱。当涉及到Integer类时,它支持自动装箱和拆箱。并且c#还支持对象类型对象的自动装箱和拆箱。
class Demo{
public static void main(String args[]){
int x=100;
Object iob1=new Object();
Object iob2=x; //Auto Boxing
System.out.println(iob2.toString());
int y = x + iob1; //Unboxing is not working
int z = x + new Integer(10); // Unboxing is working
System.out.println(y);
}
}
答案 0 :(得分:4)
拆箱工作正常。 但仅适用于Double
,Integer
等。iob1
属于Object
类型,因此无法正常工作。 jls列出了可以取消/装箱here的类型。
答案 1 :(得分:1)
int y = x + iob1;
+
运算符不能有int
和Object
(您希望如何向对象添加数字?)。见this section from the Java Language Specification:
如果
+
运算符的任一操作数的类型为String
,则该操作为字符串连接。否则,
+
运算符的每个操作数的类型必须是可转换(第5.1.8节)到原始数字类型的类型,否则会发生编译时错误。 强>