概述
for (int i = 0; i < 150; i++) {
Integer a = i;
Integer b = i;
System.out.println(i + " " + (a == b));
}
部分结果如下:
124 true 125 true 126 true 127 true 128 false 129 false 130 false 131 false
结合上述例子,每一次 i和j都会被装箱为Integer 既然是对象,那就不应该返回true了啊?
那我就用看看 i和j的内存地址
for(int i=0;i<150;i++){
Integer a=i;
Integer b=i;
System.out.println(a + " " + b + " " + System.identityHashCode(a) + "" + System.identityHashCode(b));
}
地址结果如下: 123 123 1531448569 1531448569 124 124 1867083167 1867083167 125 125 1915910607 1915910607 126 126 284720968 284720968 127 127 189568618 189568618 128 128 793589513 1313922862 129 129 495053715 1922154895
竟然....... 竟然从0到127不同时候自动装箱得到的是同一个对象!从128开始才是正常情况。 那看看源码
/**
* Returns an {@code Integer} instance representing the specified
* {@code int} value. If a new {@code Integer} instance is not
* required, this method should generally be used in preference to
* the constructor {@link #Integer(int)}, as this method is likely
* to yield significantly better space and time performance by
* caching frequently requested values.
*
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
最后
以上就是爱笑刺猬为你收集整理的Integer用==比较时127相等128不相等的原因的全部内容,希望文章能够帮你解决Integer用==比较时127相等128不相等的原因所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复