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