在 Java 中,adding/subtracting/multipying/dividing 原始类型到装箱类型是否会创建新的装箱类型对象?

In Java, does adding/subtracting/multipying/dividing a primitive type to a boxed type create a new object of the boxed type?

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

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

事情是这样的:

x is Integer in Integer x = new Integer(5); - 注意,这里不会有新对象,将使用 Integer 缓存中的对象!

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

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

拆箱出现算术运算符,

    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