一个例子: ```java String string1 = "hiwangzi"; StringBuilder stringBuilder1 = new StringBuilder(string1); System.out.println(string1.hashCode() + " " + stringBuilder1.hashCode());
String string2 = new String("hiwangzi"); StringBuilder stringBuilder2 = new StringBuilder(string2); System.out.println(string2.hashCode() + " " + stringBuilder2.hashCode());输出结果: -1232882509 1975012498 -1232882509 1808253012 ``` 可以看到,String对象的散列码是相同的,这是因为字符串的散列码是由内容导出的;而StringBuffer对象散列码不同,这是因为StringBuffer类没有定义hashCode()方法,它的散列码是由默认的Object类的默认hashCode()方法导出的对象存储地址。如果重新定义 equals 方法,就必须重新定义 hashCode 方法,以便于可以将对象插入到散列表中。可以调用 Objects.hash 方法并提供多个参数得到散列码(这种做法比较好):java public int hashCode(){ return Objects.hash(name, salary, hireDay); }equals 与 hashCode 定义必须一致,即 x.equals(y) 与 x.hashCode() == y.hashCode() 结果一致。
转载于:https://www.cnblogs.com/hiwangzi/p/7635819.html