在 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
(拆箱),您现在如何将值 6
的 int
放置在 临时变量中。
接下来,=
将进行装箱。由于 Integers
从 -128
缓存到 127
,因此不会创建值 6
的 Integer
,但 x
将指向对象 Integer(6)
在该缓存中。当我们讨论超出该范围的值时,将创建新对象。如果您之前 x
的 Integer
对象的值超出该范围,则该对象将在 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
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
(拆箱),您现在如何将值 6
的 int
放置在 临时变量中。
接下来,=
将进行装箱。由于 Integers
从 -128
缓存到 127
,因此不会创建值 6
的 Integer
,但 x
将指向对象 Integer(6)
在该缓存中。当我们讨论超出该范围的值时,将创建新对象。如果您之前 x
的 Integer
对象的值超出该范围,则该对象将在 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