小组Java
  • 数值在-128到127内的Integer对象==比较会相等,其他Integer则不等,Java中什么机制导致的?

    2016/09/10 伤已超载 11 评论  , 

Integer var1 = 300;

Integer var2 = 300;

System.out.println(var1 == var2);

打印结果是false

 

Integer var1 = -128;

Integer var2 = -128;

System.out.println(var1 == var2);

打印结果是true

 

数值在-128到127内的Integer对象==比较会相等,其他Integer则不等,Java中什么机制导致的?

1 收藏


直接登录
最新评论
  • 树莓学生 学生一枚 2016/09/10

    java虚拟机 常量池 -128-127

  • wuiimg   2016/09/11

    常量在-128~127之间,如果有相应的值在池中的,就取池中元素,否则创建新的,不在这个范围的每一次创建都会在池中创建新值,不管池中是否已有该元素

  • 朱小厮 IT 2016/09/11

    flyweight

    • micro 软件攻城狮 2016/09/30

      常量池里存放了一个字节的取值范围,flyweight是设计模式的享元模式,由于基本包装类属于使用频率非常高的对象,所以保存在常量池,下次使用不用去生成新的实例,与String类型也会缓存在常量池,就是去节省了内存。

  • 如楼上二位所说, “==” 操作比较的是变量是否指向同一个对象,而非对象是否“相等”。正确的方法是使用对象的 equals 方法。

  • wakaka java开发 2016/09/12

    偷偷地告诉你,jvm常量池可以扩容的,不一定是 -128-127

    只要在jvm加一个启动参数就行了

  • 匿名小板凳 java开发,支付 2016/09/12

    Integer 这个类里面有个缓存池 搜IntegerCache 你可以看到源码

  • 蜗牛dfs Java开发 2016/09/29

    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);
    }

  • letsgowei   2016/09/29

    看一下源码 一清二楚

     

  • ҉不忘初心 码畜 2016/09/29

    常量池导致的

  • 海之乐章 java 2016/10/02

    已经有人=给出了源代码   其实就是  jvm  默认已经创建好了  一个范围的数值  这个范围内的数值  不会再创建第二个