我在采访中得到了这个问题:
public Integer v1 = 127;
public Integer v2 = 127;
public Integer v3 = 513;
public Integer v4 = 513;
public void operatorEquals(){
if (v1==v2)
System.out.println("v1 == v2");
else throw new RuntimeException("v1 != v2");
if (v3==v4)
System.out.println("v3 == v4");
else throw new RuntimeException("v3 != v4");
}
**Result**: java.lang.RuntimeException: **v3 != v4**
Run Code Online (Sandbox Code Playgroud)
你能解释一下:为什么?我没有任何建议.
ppe*_*rka 10
Java Integer对象缓存到127,但不高于.
这种效果与String interning的工作方式非常相似,因此Integer值范围为[-128; 127]的所有对象也是相同的实例 - 通过引用相等性检查也返回true,(例如==),不仅使用.equals().
来自Arnaud Denoyelle的编辑
来自Integer.java:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |