首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

新手学习,关于赋值比较的有关问题

2013-09-10 
新手学习,关于赋值比较的问题Integer i 200Integer j 200if (i j){System.out.println(等于)}

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


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

热点排行