使用Object在java中自动装箱拆箱

时间:2015-09-05 18:25:04

标签: java boxing unboxing

使用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);
    }
}

2 个答案:

答案 0 :(得分:4)

拆箱工作正常。 仅适用于DoubleInteger等。iob1属于Object类型,因此无法正常工作。 jls列出了可以取消/装箱here的类型。

答案 1 :(得分:1)

int y = x + iob1;

+运算符不能有intObject(您希望如何向对象添加数字?)。见this section from the Java Language Specification

  

如果+运算符的任一操作数的类型为String,则该操作为字符串连接。

     

否则,+运算符的每个操作数的类型必须是可转换(第5.1.8节)到原始数字类型的类型,否则会发生编译时错误。