jvm中 hashcode
来源:互联网 发布:淘宝店加盟代理 编辑:程序博客网 时间:2024/05/21 08:00
hashCode是所有java对象的固有方法,如果不重载的话,返回的实际上是该对象在jvm的堆上的内存地址,而不同对象的内存地址肯定不同,所以这个hashCode也就肯定不同了。如果重载了的话,由于采用的算法的问题,有可能导致两个不同对象的hashCode相同。
而且,还需要注意一下两点:
1)hashCode和equals两个方法是有语义关联的,它们需要满足:
A.equals(B)==true –> A.hashCode()==B.hashCode()
因此重载其中一个方法时也需要将另一个也重载。
2)hashCode的重载实现需要满足不变性,即一个object的hashCode不能前一会是1,过一会就变成2了。hashCode的重载实现最好依赖于对象中的final属性,从而在对象初始化构造后就不再变化。一方面是jvm便于代码优化,可以缓存这个hashCode;另一方面,在使用hashMap或hashSet的场景中,如果使用的key的hashCode会变化,将会导致bug,比如放进去时key.hashCode()=1,等到要取出来时key.hashCode()=2了,就会取不出来原先的数据。这个可以写一个简单的代码自己验证一下。
— 共有 2 条评论 —
方武卓: @xu4v 嗯,对mobile开发不了解,忽略了其他方面的情况,谢谢指正 2年前
xu4v: 未必是地址,主要取决于runtime library的实现,比如Android libcore就没有直接用地址,而是在地址的基础上hack一下 2年前
阅读全文
0 0
- jvm中 hashcode
- String中hashCode算法
- java中HashCode使用
- 关于JAVA中hashCode
- java中hashCode()
- Java中hashCode详解
- JAVA中 hashcode && equals
- String中hashCode分析
- java 中hashcode作用
- Java中hashcode方法
- Java中hashcode
- java 中 hashCode方法
- Java中hashcode方法
- String中hashCode方法
- (转)Java中HashCode()方法
- HashSet中hashCode的作用
- java中HashCode的使用
- java 中hashcode的理解
- 面向对象总结
- Matlab快速入门1——基础操作
- linux-http服务与配置
- 从文件中读数据并显示到控制台
- 二分查找
- jvm中 hashcode
- Incompatible type.Found:'int',required:'java.lang.String'
- 【系统安装】PXELINUX(网络安装引导启动)
- 用数据的心智经营一家公司
- vs2008 F5调试慢的问题
- 冒泡排序、快速排序、堆排序(Java)
- 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
- CentOS7使用firewalld打开关闭防火墙与端口
- vue发送ajax --axios入门介绍