例 1:
- public static void main(String[] args){
- Integer a = 128,b = 128;
- Integer c = 127,d = 127;
- System.out.println(a==b);
- System.out.println(c==d);
- }
当我们给一个 Integer 对象赋一个 interesting 值得时候,会调用 Integer 类的静态方法 valueOf,其源代码实现为
- 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();
- }
如果整型字面量的值介于 - 128 到 127 之间,就不会 new 一个新的 Integer 对象,而是直接引用常量池中的 Integer 对象,所以上面的运行结果为:
false
true
例 2:
- public static void main(String[] args) {
- Integer a = new Integer(128);
- int b = 128;
- Integer c = new Integer(6);
- Integer d = new Integer(6);
- System.out.println(a == b);
- System.out.println(c == d);
- }
当 int 和 Integer 做 == 比较的是偶,Integer 类型会自动拆箱,也就是把 Integer 转成 int 类型,所以这里比较的是 int 类型的值,所以 a==b 为 true;
c==d 中 c、d 这里的 Integer 是 new 出来的,并不是用的缓存,所以结果为 false。
来源: https://www.cnblogs.com/GuYL/p/8228972.html