两个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版权协议,转载请附上原文出处链接和本声明。