Eri*_*ang 7 java wrapper variable-assignment
以下测试用例将通过:
@Test
public void assignWrapperTest() {
System.out.printf("\nassign - %s\n", "wrapper");
Integer a = 1000;
Integer b = a;
System.out.printf("a = %d, b = %d\n", a, b);
Assert.assertEquals(a, b);
Assert.assertSame(a, b); // a, b are the same object,
a++;
System.out.printf("a = %d, b = %d\n", a, b);
Assert.assertNotEquals(a, b);
Assert.assertNotSame(a, b); // a, b are not the same object, any more,
}
Run Code Online (Sandbox Code Playgroud)
所以:
a改变了++.b 保持原样.问题是:
b = a 只需指定正确的引用值,它们引用同一个对象,此时只有一个对象,对吧?++创建了一个新的Integer对象,并自动将其分配回原始变量?如果是这种情况,这是否意味着a现在指向另一个对象?b仍然指向原来的一个?And*_*ner 10
a++;
Run Code Online (Sandbox Code Playgroud)
因为a是Integer,这与以下相同:
a = Integer.valueOf(a.intValue() + 1);
Run Code Online (Sandbox Code Playgroud)
这意味着
++创建了一个新的Integer对象
可能,但不一定:Integer.valueOf将重用缓存的值; 只有在缓存范围之外(至少为-128..127)才会创建新值.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |