Integer类型值相等或不等分析

两个Integer变量,定义为Integer a;  Integer b;


如果 Integer a = 123, Integer b = 123,可以返回true

但如果Integer a = 12345, Integer b = 12345,返回false


看下Integer的源码


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


默认IntegerCache.low 是-128,Integer.high是127,如果在这个区间内,他就会把变量i当做一个变量,放到内存中;
但如果不在这个范围内,就会去new一个Integer对象,

在1中Integer值在这个范围内,直接使用IntegerCache中的值进行比较
在2中Integer值不在这个范围内,new了两个实例,这样再用==,肯定是false。

Integer 类型的值在[-128,127] 期间,Integer 用 “==”是可以的, Integer  与 int 类型比较(==)比较的是值。

另一种情况 int 与 integer 比较:

 Integer e = 128;
 int e1 = 128;
 (e == e1 ----- true)

引用类型Integer与值类型int比较,比较的是各自的value,因为int在堆中是不开辟内存,他在栈中的值则为他本身的值


版权声明:本文为injurooioo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。