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 是不一样的