读书人

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

发布时间: 2013-09-10 13:42:18 作者: rapoo

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


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

读书人网 >J2SE开发

热点推荐