java吧 关注:1,234,443贴子:12,700,692
  • 18回复贴,共1

为什么整型包装类Integer, 128以下可以直接比较,128以上不行?

只看楼主收藏回复

为什么128以下直接比较数值,128以上就变成比较对象了?
这是一个人为的设置吗?


1楼2017-02-04 11:42回复
    我擦,好坑啊,127以下其实也是比较对象,只不过返回了一个之前缓存的对象所以相等?
    public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
    }


    2楼2017-02-04 11:50
    回复
      那这样岂不是HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>()里面的value相同的大于128的整型key也会算作不同对象?


      3楼2017-02-04 11:51
      收起回复
        -128 到 +127之间有缓存的


        IP属地:广东4楼2017-02-04 12:13
        回复
          有趣


          IP属地:广东来自iPhone客户端5楼2017-02-04 12:51
          回复
            这是规定……
            -128/127就是这么规定的……


            6楼2017-02-04 13:53
            回复
              int类型的数据取值是-128到127


              来自Android客户端8楼2017-02-04 14:55
              收起回复
                反正不要用==,用equals,
                不是都给出警告了,


                IP属地:广东来自Android客户端10楼2017-02-04 15:44
                回复
                  有缓存


                  IP属地:浙江来自Android客户端11楼2017-02-04 17:34
                  回复
                    有缓存池的


                    来自Android客户端12楼2017-02-04 17:59
                    回复
                      你可以想象一下==是比较地址的,euqals是比较值。。。


                      来自Android客户端13楼2017-02-04 18:41
                      回复
                        直接看integer 的源码,他中的代码,是写有这个范围有缓存。


                        IP属地:北京来自Android客户端14楼2017-02-05 16:33
                        回复
                          因为-128到127,在缓存中,无需new,


                          IP属地:浙江来自Android客户端17楼2017-02-07 12:22
                          回复
                            自动装箱,—127到正128会自动装箱成int类型,比较的数值类型,其余的比较的就是对象地址。那个范围可能不对,大概就是这样


                            IP属地:云南来自Android客户端18楼2018-11-21 09:58
                            回复