Integer n1 = 123;
Integer n2 = 123;
Integer n3 = 128;
Integer n4 = 128;
System.out.println(n1 == n2);// true
System.out.println(n3 == n4);// false
System.out.println(n3.intValue()==n4.intValue());// true
System.out.println(128==n3);// true
System.out.println(128==n4);// true
// 对象的hashcode值
System.out.println(System.identityHashCode(n1));// 366712642
System.out.println(System.identityHashCode(n2));// 366712642
System.out.println(System.identityHashCode(n3));// 1829164700
System.out.println(System.identityHashCode(n4));// 2018699554

为什么 n3==n4  是false呢,因为Integer 对象是在 Integer.IntegerCache 中产生的 ,而 -128- 127的值已经被缓存了,当新的Integer对象在此区间时,会被复用;不在此区间时会在堆上产生新的对象。所以,n1  n2  的hashcode一样的,而n3 、n4  的hashcode 是不一样的