hashCode和identityHashCode的区别

参考答案

1.  区别

hashCode()

  • 是Object类下面的一个方法,供继承类重写,根据对象内存地址计算哈希值,String类重写了hashCode方法,并改为根据字符序列来计算哈希值。
  • 调用该方法时,会返回一个hash码,只有指向同一个对象的引用变量调用才会返回相同值,而String类中放宽了要求,对象里的值相等也返回相同值。

identityHashCode()

  • 是System类中的静态方法,根据对象内存地址来计算哈希值。
  • 调用该方法时,不管类中是否重写了Object类中的hashCode方法,都执行Object类中的hashCode方法,返回一个hashCode值,所以只有指向同一个对象的引用变量调用才会返回相同值。

2.  实例

public static void main(String[] args)

     {

下面程序中s1和s2是两个不同对象。

String s1 = newString("Hello");

         String s2 =newString("Hello");

String类重写了Object类的hashCode方法——改为根据字符序列计算hashCode值,因为s1和s2的字符序列相同,所以它们的hashCode方法返回值相同。

System.out.println(s1.hashCode() +"----" + s2.hashCode());

s1和s2是不同的字符串对象,所以它们的identityHashCode值不同,identityHashCode是根据对象的地址计算得到的,所以任何两个不同的对象的identityHashCode值总是不相等。

System.out.println(System.identityHashCode(s1)+ "----" 

                       +System.identityHashCode(s2));

s3和s4是相同的字符串对象,所以它们的identityHashCode值相同。

   String s3 ="Java";

        String s4 ="Java";

       System.out.println(System.identityHashCode(s3)+"----" 

                           +System.identityHashCode(s4));}

结果:hashCode方法可以被重写并返回重写后的值,identityHashCode会返回对象的hash值而不管对象是否重写了hashCode方法。

69609650----69609650

13078969----3154093

28399250----28399250

以上,是Java面试题【hashCode和identityHashCode的区别】的参考答案。

 

输出,是最好的学习方法。

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧