Java identityHashCode
所属分类 java
浏览量 601
没有重写对象的 HashCode 方法,使用的是 Object的native int hashCode()
返回的 hashCode 就是 identityHashCode
重写了 HashCode, 可通过 System.identityHashCode(Object x) 获取 identityHashCode
对象的 identityHashCode 不会变
identityHashCode 在第一次计算时存入对象头的MarkWord结构中,
后续再次获取 identityHashCode , 直接返回 MarkWord 中的值,
重写的 HashCode 并不会存入 MarkWord
对象的 identityHashCode 和地址相关
对象会因 GC , 移动改变存储位置,返回的 identityHashCode 却永远相同
identityHashCode 只与它第一次计算时的地址有关
IdentityHashMap
Integer int1 = new Integer(1);
Integer int2 = new Integer(1);
System.out.println(int1.hashCode());
System.out.println(int2.hashCode());
System.out.println(System.identityHashCode(int1));
System.out.println(System.identityHashCode(int2));
Map hashmap = new HashMap();
hashmap.put(int1, "1");
hashmap.put(int2, "1");
// {1=1}
System.out.println(hashmap);
Map identityHashMap = new IdentityHashMap();
identityHashMap.put(int1, "1");
identityHashMap.put(int2, "1");
// {1=1, 1=1}
System.out.println(identityHashMap);
java 对象头 MarkWord
Java Object Layout (JOL)
Java对象结构
JVM中的对象内存布局
Java锁升级过程
并发机制的底层实现原理摘要
Java动态代理InvocationHandler例子
上一篇
下一篇
hibernate5.3 tutorials
hibernate5 主键生成策略
windows使用技巧
dubbo简史
Dubbo2.7三大新特性简介
zookeeper单机安装