• hashCode和identifyHashCode的区别


    API:

    System类提供一个identifyHashCode(Object o)的方法,该方法返回指定对象的精确hashCode值,也是根据该对象的地址计算得到的HashCode值。当某个类的hashCode()方法被重写之后,该类实例的hashCode()的方法就不能唯一标识该对象。但是通过identifyHashCode()方法返回的依然是hashCode()值,依然是根据该对象的地址计算得到 hashCode值。所以两个对象的identifyHashCode()值相同,该对象就绝对是一个对象

    HashCode()和identifyHashCode()的关系

    (1)对象的hashCode()一般是通过将对象的内部地址转换成一个整数来实现的

    (2)当一个类重写了Object类的hashCode()方法时,他的hashCode则由重写的实现逻辑决定,此时的hashCode()值一般就不再和对象本身的内部地址有相应的哈希值了

    (3)当null调用hashCode()方法时,会返回异常,但是System.identifyhashCode(null)则会返回0

    (4)一个对象的identifyHashCode(Object o)能够始终和该对象的内部地址有一个相对应的关系,单从这个角度来说,他可以代表对象的引用地址

     1 public class Test {
     2     public static void main(String[] args) throws Throwable {
     3         String a = new String("111");
     4         String c = new String("111");
     5         String b = a;
     6         System.out.println(System.identityHashCode(a)); // 17225372
     7 
     8         System.out.println(System.identityHashCode(b));// 17225372 因为a和c指向的是同一个对象,所以地址是一样的
     9         System.out.println(System.identityHashCode(c));// 5433634
    10         System.out.println(a.hashCode());// 48657 hashCode()方法返回的不再是地址值,因为String类对hashCode()方法进行了改写,返回的是值的hashCode
    11 
    12         System.out.println(c.hashCode());// 48657
    13 
    14         Test2 aTest = new Test2();
    15         System.out.println(aTest.hashCode()); // 2430287
    16 
    17         System.out.println(System.identityHashCode(aTest));// 2430287
    18     }
    19 
    20 }
    21 
    22 class Test2 {
    23 
    24     public Test2() {
    25     }
    26 
    27 }
  • 相关阅读:
    flask框架(一):初入
    .py文件打包成.exe文件
    gtk+-3.21.4 static build step in windows XP
    cairo-1.14.6 static compiler msys mingw32
    ffmpeg-20160811-bin.7z
    gtk+2.24.0-glib-2.28.1-staticLib-mingw32-x86-2016-08-10.7z
    ffmpeg-20160806-bin.7z
    glib-2.49.4-msys-x86-staticLib.7z
    Tesseract-OCR text2image.exe [ x86 支持 XP ]
    ffmpeg-20160803-bin.7z
  • 原文地址:https://www.cnblogs.com/zhuitian/p/12066169.html
Copyright © 2020-2023  润新知