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)能够始终和该对象的内部地址有一个相对应的关系,单从这个角度来说,他可以代表对象的引用地址
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的区别的更多相关文章
- java中hashcode和equals的区别和联系
HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...
- hashCode和equals的区别
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写has ...
- [转载] HashMap的工作原理-hashcode和equals的区别
目录 前言 为什么需要使用Hashcode,可以从Java集合的常用需求来描述: 更深入的介绍 先来些简单的问题 HashMap的0.75负载因子 总结 我在网上看到的这篇文章,介绍的很不错,但是我看 ...
- hashCode与equals的区别与联系
一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...
- !!转!!hashCode与equals的区别与联系
这篇文章写得很好!!! 原文链接:http://blog.csdn.net/afgasdg/article/details/6889383 一.equals方法的作用 1.默认情况(没有覆盖equal ...
- java中的hashcode和euqals的区别和联系
一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...
- "==" equals和hashCode的联系和区别
写这篇文章的目的是自己彻底把三者搞清楚,也希望对你有所帮助. 1."=="运算符对与基本类型(int long float double boolean byte char sho ...
- 《基础知识》hashCode与equals的区别与联系
一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...
- hashCode 及hashcode与equals的区别
1.hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 [1] public int hashCode()返回该对象的哈希码值.支持此方法是为了提高哈 ...
随机推荐
- SpringMVC从Session域中获取值
SpringMVC从Session域中获取值 SpringMVC环境自行搭建 第一步:前端页面 第二步.后台代码 第三步.响应视图 第四步.在当前处理器所在的类设置@SessionAttributes ...
- nginx代理mysql
实验环境: 两台编译安装的mysql 一台编译安装的nginx 192.168.3.1 ...
- mysql集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- 贝叶斯分类器——递增式学习partial_fit方法
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39777626/articl ...
- Java默认文件目录
今天看到Ehcache中设置持久化的配置: <diskStore path="java.io.tmpdir" /> 好奇这个java.io.temdir是哪个目录,于是 ...
- Tensorflow 2 flower_photos花卉数据集手动下载、离线安装、本地加载、快速读取
Tensorflow 2 flower_photos花卉数据集手动下载.离线安装.本地加载.快速读取 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.c ...
- Object.keys()、Object.values()、Object.entries()的用法
一.Object.keys(obj) 参数:要返回其枚举自身属性的对象 返回值:一个表示给定对象的所有可枚举属性的字符串数组 处理对象,返回可枚举的属性数组 let person = {name:&q ...
- sublime 删除重复行
sublime 删除重复行 - 国内版 Binghttps://cn.bing.com/search?q=sublime+%E5%88%A0%E9%99%A4%E9%87%8D%E5%A4%8D%E8 ...
- HTML中 :after和:before的作用及使用方法(转)
1. :before 和 :after 的主要作用是在元素内容前后加上指定内容,示例: HTML代码: <p>你好</p> CSS代码: p:before{ content: ...
- WPF分析工具
分析WPF程序是理解其行为很重要的一步,市场上有大量现成的WPF程序分析工具,如Snoop,WPFPerf,Perforator和Visual Profiler,其中Perforator和Visual ...