2015-09-05 60 views
0

使用Object使用Object类型的对象用于自动装箱正在工作,但它不适用于拆箱。背后的原因是什么?我的意思是关于不为对象类型对象拆箱功能。有什么特别的理由来实现这种行为。因为它支持自动装箱,但不支持拆箱。当涉及到Integer类时,它支持自动装箱和取消装箱。而且c#还支持对象类型对象的自动装盒和拆箱。使用对象在java中自动装箱拆箱使用对象

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

@ Swailem95非/拳击这里描述的JLS:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.7 。基本上是将原始类型隐式转换为相应的'Object'类型,例如'int'到'Integer',反之亦然 – Paul

+0

你应该为一个对象('iob1')添加一个int值('x')?!也许'else/if'接下来呢? – 2015-09-05 18:31:28

+0

如何将'100'添加到'Object'。例如,拳击与整型转换有关。你需要将'Object'强制转换为'Integer'。我真的不明白你的期望如何工作。 –

回答

3

拆箱工作得很好。 但是只适用于Double,Integer等。iob1属于Object类型,所以无法正常工作。 jls列出了可以取消/装箱的类型here

0
int y = x + iob1; 

+运营商不能有intObject(你期望的号码添加到一个对象怎么办?)。见this section from the Java Language Specification

如果+运营商的一个操作数的类型为String,则操作字符串连接。

否则,运算符+的每个操作数的类型必须是可以转换(§5.1.8)为原始数值类型或发生编译时错误的类型。