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