减去两个Integer对象会导致Integer或原始int吗?

时间:2011-10-31 18:55:03

标签: java wrapper

假设我们有两个Integer对象:

Integer i=100,j=200;

(j-i)是否评估另一个值为100的整数包装器对象,或原始int

2 个答案:

答案 0 :(得分:4)

快速测试显示java正在使用整数缓存,并重新使用i

@Test
public void test() {
    Integer i=100, j=200;
    System.out.println("i: " + System.identityHashCode(i));
    System.out.println("j: " + System.identityHashCode(j));

    Integer sub = j-i;
    System.out.println("j-i: " + System.identityHashCode(sub));
}

输出:

i: 1494824825
j: 109647522
j-i: 1494824825 <-- same as i

答案 1 :(得分:4)

结果将是int 100。

ij都将自动取消装箱,因此i-j的结果将为int

但是如果你将结果分配如下:

Integer r = i - j;

然后结果将再次自动装箱。