hashCode和identifyHashCode的区别
时间:2019-12-19
本文章向大家介绍hashCode和identifyHashCode的区别,主要包括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 }
原文地址:https://www.cnblogs.com/zhuitian/p/12066169.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 中如何切换相同程序的不同版本
- Linux中查看指定文件夹内各个子文件夹内的文件数量
- Linux系统中 /etc/fstab 文件的深入解读
- bash命令使用详解
- 实例详解Linux 中的命令链接操作符
- Python 为什么不支持 switch 语句?
- centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析
- Linux多线程编程快速入门
- Linux添加swap分区的方法
- linux下vsftpd的安装及配置使用详细步骤(推荐)
- Linux分区格式化的命令
- Linux调试工具GDB使用简易教程
- Linux 挂载分区的方法
- 使用Python生成Shell命令,批量执行程序代码解析
- 基于Ubuntu 18.04配置固定IP的方法教程