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)能够始终和该对象的内部地址有一个相对应的关系,单从这个角度来说,他可以代表对象的引用地址

 public class Test {
public static void main(String[] args) throws Throwable {
String a = new String("111");
String c = new String("111");
String b = a;
System.out.println(System.identityHashCode(a)); // System.out.println(System.identityHashCode(b));// 17225372 因为a和c指向的是同一个对象,所以地址是一样的
System.out.println(System.identityHashCode(c));//
System.out.println(a.hashCode());// 48657 hashCode()方法返回的不再是地址值,因为String类对hashCode()方法进行了改写,返回的是值的hashCode System.out.println(c.hashCode());// Test2 aTest = new Test2();
System.out.println(aTest.hashCode()); // System.out.println(System.identityHashCode(aTest));//
} } class Test2 { public Test2() {
} }

hashCode和identifyHashCode的区别的更多相关文章

  1. java中hashcode和equals的区别和联系

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  2. hashCode和equals的区别

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写has ...

  3. [转载] HashMap的工作原理-hashcode和equals的区别

    目录 前言 为什么需要使用Hashcode,可以从Java集合的常用需求来描述: 更深入的介绍 先来些简单的问题 HashMap的0.75负载因子 总结 我在网上看到的这篇文章,介绍的很不错,但是我看 ...

  4. hashCode与equals的区别与联系

    一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...

  5. !!转!!hashCode与equals的区别与联系

    这篇文章写得很好!!! 原文链接:http://blog.csdn.net/afgasdg/article/details/6889383 一.equals方法的作用 1.默认情况(没有覆盖equal ...

  6. java中的hashcode和euqals的区别和联系

    一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...

  7. "==" equals和hashCode的联系和区别

    写这篇文章的目的是自己彻底把三者搞清楚,也希望对你有所帮助. 1."=="运算符对与基本类型(int long float double boolean byte char sho ...

  8. 《基础知识》hashCode与equals的区别与联系

    一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...

  9. hashCode 及hashcode与equals的区别

    1.hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 [1]  public int hashCode()返回该对象的哈希码值.支持此方法是为了提高哈 ...

随机推荐

  1. Java8 LocalDateTime的补充工具方法

    import java.time.*;import java.time.format.DateTimeFormatter;import java.time.format.DateTimeFormatt ...

  2. Hadoop hadoop balancer配置

    hadoop版本:2.9.2 1.带宽的设置参数: dfs.datanode.balance.bandwidthPerSec   默认值 10m 2.datanode之间数据块的传输线程大小:dfs. ...

  3. mfc封装cef浏览器 关闭整个窗口程序得时候又重启mfc 应用的程序

    最近使用mfc 做了一个cef得浏览器 多标签得.当使用这个封装得浏览器一段时间之后(超过1分钟2分钟) 当关闭封装得浏览器整个窗体 x得时候,整个窗体又重新弹了出来. 大概现象就是一个exe程序你杀 ...

  4. Android Mboot mmc命令介绍

    mmc command.         目前Mboot支持以下mmc命令: 1) mmc read/write.    读写命令.Addr = 内存地址, blk# = 起始block数, size ...

  5. 用variant的数据来推导基因表达 | Imputation of Expression Using PrediXcan

    一个工具的逻辑得足够完善.意义足够重大,才有资格发在NG上. A gene-based association method for mapping traits using reference tr ...

  6. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...

  7. ArcPy地理处理工具案例教程—批量添加栅格数据

    ArcPy地理处理工具案例教程-批量添加栅格数据 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 关键字: Arcpy,python,地理处理工 ...

  8. CopyOnWrite 思想及在 Java 并发包中的具体体现

    读多写少的场景下引发的问题? 假设现在我们的内存里有一个 ArrayList,这个 ArrayList 默认情况下肯定是线程不安全的,要是多个线程并发读和写这个 ArrayList 可能会有问题. 那 ...

  9. Docker入门常识帖

    上传镜像到官方仓库 https://blog.csdn.net/yuhui123999/article/details/82220093 注册账号 (免费的) https://hub.docker.c ...

  10. Navicat Premium 12 mysql show error: connection is being used

    错误原因:连接数满了. 解决方案:杀掉无用连接,释放资源.