Integer类型值相等或不等分析

来源:互联网 发布:淘宝主图平铺拍摄技巧 编辑:程序博客网 时间:2024/04/28 20:36

两个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在堆中是不开辟内存,他在栈中的值则为他本身的值

原创粉丝点击