System類提供了一個identityHashCode(Object x)方法,這個方法返回的是指定對象的精確hashCode值,也就是根據該對象的地址計算獲得的hashCode值。ide
當某個類的hashCode()方法被重寫以後,該類實例的hashCode方法就不能惟一地標識該對象,可是若是兩個對象的identityHashCode值相同,則這兩個對象是一個對象。spa
經過如下代碼加深理解:code
1 public class IdentityHashCodeTest{ 2 public static void main(String[] args){ 3 String s1=new String("Hello"); 4 String s2=new String("Hello"); 5 System.out.println(s1.hashCode()+"----"+s2.hashCode()); 6 System.out.println(System.identityHashCode(s1)+"----"+System.identityHashCode(s2)); 7 8 String s3="Java"; 9 String s4="Java"; 10 System.out.println(System.identityHashCode(s3)+"----"+System.identityHashCode(s4)); 11 } 12 }
輸出結果以下:對象
結論;blog
1.s1和s2雖然是不一樣的兩個對象,它們的identityHashCode值不一樣,可是因爲String重寫了hashCode方法,改成根據字符序列計算,因此第一個輸出是同樣而第二個是不同的。hash
2.s3和s4是相同的對象,在常量池裏,因此第三個輸出是同樣的。it