为什么 Java 中 “1000= =1000” 为 false,而 ”100= =100“ 为 true?
看一下代码:
Integer a = 1000, b = 1000;
System.out.println(a == b);//1
Integer c = 100, d = 100;
System.out.println(c == d);//2
得到的输出结果为:
false
true
如果两个引用指向同一个对象,那么==返会true,否则则返会false
那么第一条语句返会false,应该不难理解,那为什么第二条语句会返会true呢?
这就要说到Integer.java
类了,该类中有一个内部私有类,IntegerCache.java
,它缓存了从-128到127之间的所有的整数对象。
所以当我们实例化这样一个对象时:
Integer c = 100;
实际内部是这样的:
Integer i = Integer.valueOf(100);
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
如果值的范围在-128到127之间,它就从高速缓存返回实例。
所以
Integer c = 100, d = 100;
指向了同一个对象。当然就返会true了