新手学习,关于赋值比较的问题
Integer i = 200;
Integer j = 200;
if (i == j)
{
System.out.println("等于");
}else{
System.out.println("不等于");
};
如上 所示,当赋值在-127-127之间时,两个变量相等,当区间之外时,不等,能告知原因么?还有如何避免该现象
------解决方案-------------------- ==改成equal
------解决方案-------------------- Integer赋值时,实际上是自动装箱的过程,也就是调用了Integer.valueOf(int)方法,当这个值大于等于-128并且小于等于127时使用了常量池,所以前两个地址是相等的,但是后两个超过了127,故不使用常量池。
------解决方案-------------------- 看源码
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
} ------解决方案-------------------- 引用: 看源码
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
原来做了这种优化啊。挺好,挺好!