Java当中我们常用的一可能是String.HashCode这个方法所产生或是我们自己来覆盖超类当中的HashCode方法,等等的操作,但是System.identityHashCode当中的方法是根据当前对象的地址来计算的,就算是两个对象是相同的(不是引用)他们两个的HashCode值也是不同的;
下面是例子:
-
package com.barneyx.args;
-
-
/**
-
* Created by Administrator on 2017/2/11.
-
*/
-
public class IdentityHashCodeTest {
-
public static void main(String[] args) {
-
//这里是两个对象,两个不同的地址,所以肯定HashCode的值是不同的
-
String s1 = new String("hello");
-
String s2 = new String("hello");
-
-
System.out.println(
-
s1.hashCode()+
-
"---------------"+
-
s2.hashCode()
-
);
-
-
System.out.println(System.identityHashCode(s1)+"-----"+System.identityHashCode(s2));
-
-
String s3 = "Java";
-
String s4 = "Java";
-
-
//s3和s4是相同的字符串所以他们只有一分引用,所以他们的HashCode是相同的
-
System.out.println(System.identityHashCode(s3)+"-----------"+System.identityHashCode(s4));
-
-
-
}
-
}
-
-
/******************************
-
运行结果:
-
99162322---------------99162322
-
460141958-----1163157884
-
1956725890-----------1956725890
-
-
Process finished with exit code 0
-
*******************************/
阅读(1319) | 评论(0) | 转发(0) |