可能重复:
奇怪的Java拳击
最近,当我阅读有关包装类时,我遇到了这个奇怪的案例:
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1 == i2) System.out.println("same object");
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
different objects
Run Code Online (Sandbox Code Playgroud)
和
Integer i1 = 10;
Integer i2 = 10;
if(i1 != i2) System.out.println("different objects");
if(i1 == i2) System.out.println("same object");
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
same object
Run Code Online (Sandbox Code Playgroud)
这个案子有合理的解释吗?
谢谢
==为第二种情况返回true 的原因是因为包装器装箱的原始值足够小,无法在运行时间隔到相同的值.因此他们是平等的.
在第一种情况下,Java的整数缓存不足以包含数字1000,因此您最终创建两个不同的包装器对象,比较哪个通过引用返回false.
可以在Integer#valueOf(int)方法中找到所述缓存的使用(IntegerCache.high默认为127):
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
Run Code Online (Sandbox Code Playgroud)
正如Amber所说,如果您使用,.equals()那么两种情况都会返回true,因为它会在必要时将它们拆开,然后比较它们的原始值.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |