也對,也不對。
如果此對象重寫了equals方法,那么可能出現這兩個對象的equals相同,而hashcode不同。
如果此對象繼承Object,沒有重寫equals方法,那么就使用Object的equals方法,Object對象的equals方法默認是用==實現的,那么如果equals相同,hashcode一定相同。
Object 的equals方法:
==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。
public boolean equals(Object obj) { return (this == obj); }
String 重寫了equals方法:
只要兩個引用所指向的對象是兩塊含有一樣字樣的字符串的話,那么就返回true
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }