1、hashCode和identityHashCode
hashCode() 是根据 内容 来产生hash值的;
System.identityHashCode() 是根据 内存地址 来产生hash值的。new出来的String对象的内存地址是不一样的,所以hash值也不一样。
2、equals和==
equals():比较的是内容,或者说值;
==:比较的是地址,内存地址。
3、例题
例1.
String a = new String("foo");
String b = new String("foo");
System.out.println(System.identityHashCode(a) + " " + System.identityHashCode(b));
System.out.println(a.hashCode() + " " + b.hashCode());
System.out.println(a == b);
System.out.println(a.equals(b));
输出:
2018699554 1311053135
101574 101574
false
true
例2.
String c = "hello";
String d = "hello";
System.out.println(System.identityHashCode(c) + " " + System.identityHashCode(d));
System.out.println(c.hashCode() + " " + d.hashCode());
System.out.println(c == d);
System.out.println(c.equals(d));
输出:
118352462 118352462
99162322 99162322
true
true