public static void main(String[] args) throws NoSuchFieldException,
IllegalAccessException {
Integer a = 1000, b = 1000;
System.out.println(a == b);//1
Integer c = 100, d = 100;
System.out.println(c == d);//2
System.out.println(100 == 100); // 3
System.out.println(1000 == 1000); // 4
Class cache = Integer.class.getDeclaredClasses()[0];
Field myCache = cache.getDeclaredField("cache");
myCache.setAccessible(true);
Integer[] newCache = (Integer[]) myCache.get(cache);
newCache[132] = newCache[133];
int a2 = 2;
int b2 = a2 + a2;
System.out.printf("%d + %d = %d", a2, a2, b2); // 5
}
控制台打印结果:
false
true
true
true
2 + 2 = 5
原因:对于Integer来说,-128-127之间的整型已经初始化放在IntegerCache中,如果是在这个范围内的话,其实引用的都是一个对象值,否则是不同的对象额
所以如果不在这个范围内的话,比较Integer的话,是用equals()比较了额