[英]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对象?
是
当算术运算符出现时, 拆箱将会出现问题,
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
这是发生的事情:
x
是Integer
in Integer x = new Integer(5);
- 注意,这里没有新对象,将使用来自Integer缓存的对象!
现在, x + 1
执行。 为了使这种情况发生, x
变得int
(拆箱),并且现在如何int
的值6
,其被放置在临时变量 。
接下来,拳击将发生在=
。 由于Integers
从-128
缓存到127
,因此不会创建值为6
的Integer
,但x
将指向该缓存中的对象Integer(6)
。 当我们谈论该范围之外的值时,将创建新对象。 如果你之前有一个值超出该范围的x
的Integer
对象,则该对象在决定时将被GC删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.