最近发现了一个情况;如下:
public static void main(String[] args) {
Integer a=333;
Integer b=333;
int c=333;
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
输出的结果:
false
true
true
true
但是在a、b、c都等于3的时候
public static void main(String[] args) {
Integer a=3;
Integer b=3;
int c=3;
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
输出的结果:
true
true
true
true
同样的方法只是数字不同而已结果却有差异,查看资料发现时这样:
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(i);
}
原来在[-128,127]之间的数据,用的是缓存数据。
看到一个解释较为详细的了,不再多说了
有需要的朋友直接查看:http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html