在Java中,是否将基元类型添加/减去/乘/划分为盒装类型会创建盒装类型的新对象?

时间:2016-05-19 10:21:10

标签: java autoboxing

Integer x = new Integer(5);
x = x + 1;

对于上面的代码片段,是执行操作x = x + 1时创建的新Integer对象吗?

2 个答案:

答案 0 :(得分:2)

当算术运算符出现时,

拆箱 将会出现问题,

    Integer x = new Integer(5);
    x = x + 1; //1) Unboxing will happen to int 5. 2)Addition happens 
                            3)Reboxing to new Object -- this will create new Object

答案 1 :(得分:1)

这就是:

{p> x Integer中的Integer x = new Integer(5); - 注意,此处不会有新对象,将使用整数缓存中的对象!

现在,x + 1执行。为了实现这一点,x变为int(取消装箱),现在您int的值6如何放置在临时变量中

接下来,=将进行拳击。由于Integers已从-128缓存到127,因此您的Integer6将不会被创建,但x将指向对象{ {1}}在该缓存中。当我们谈论该范围之外的值时,将创建新对象。如果您之前有Integer(6) x对象的值超出该范围,则该对象在决定时将被GC删除。