我是靠谱客的博主 爱笑刺猬,最近开发中收集的这篇文章主要介绍Integer用==比较时127相等128不相等的原因,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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不相等的原因所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部