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