日期:2014-05-20  浏览次数:20720 次

新手学习,关于赋值比较的问题
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);
    }


原来做了这种优化啊。挺好,挺好!