首页  

Java identityHashCode     所属分类 java 浏览量 591
没有重写对象的 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单机安装