美文网首页
为什么Integer 100 == Integer 100而10

为什么Integer 100 == Integer 100而10

作者: _CloudNine | 来源:发表于2017-04-18 19:47 被阅读835次

如果运行如下代码

Integer a = 1000, b = 1000; 
System.out.println(a == b);
Integer c = 100, d = 100; 
System.out.println(c == d);

你会得到下面的结果

false
true

我们知道 == 比较的是引用指向的对象是否相同,内存地址是否一样。如果查看Integer的代码就会发现当你声明Integer a = 100;实际上,运行的是Integer a = Integer.valueOf(100)),继续查看ValueOf函数

public static Integer valueOf(int i) {
      if (i >= IntegerCache.low && i
          return IntegerCache.cache[i + (-IntegerCache.low)];
      return new Integer(i);
    }

如果值在-128到127之间,它就会返回该缓存的实例。至此就明白了以上问题。下面就是个很有趣的例子.

        Class cache = Integer.class.getDeclaredClasses()[0]; 
        Field myCache = cache.getDeclaredField("cache"); 
        myCache.setAccessible(true);

        Integer[] newCache = (Integer[]) myCache.get(cache); 
        newCache[132] = newCache[133]; 

        int a = 2;
        int b = a + a;
        System.out.printf("%d + %d = %d", a, a, b); 

相关文章

网友评论

      本文标题:为什么Integer 100 == Integer 100而10

      本文链接:https://www.haomeiwen.com/subject/vteqzttx.html