Я вникаю в основы Java. Я выхожу из этого article, что метод java equals означает, что если два объекта равны, то они должны иметь один и тот же hashCode().Как работает метод equals()
Вот мой пример.
public class Equals {
/**
* @param args
*/
public static void main(String[] args) {
String a = new String("a");
String b = new String("a");
System.out.println("a.hashCode() "+a.hashCode());
System.out.println("b.hashCode() "+b.hashCode());
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
выход:
a.hashCode() 97
b.hashCode() 97
ложные
истинно
Фактический язык Java составляет метод
public boolean equals(Object obj) {
return (this == obj);
}
В мой вышеприведенный пример, a.equals (b) вернул true, meani g выполняется условие a == b. Но тогда почему a == b возвращает false в этом примере?
Не hashCode и адрес один и тот же? Кроме того, hashCode сравнивается, когда мы говорим a == b или что-то еще?
Не отвлекайтесь на хэш-код. Это не определение равенства. Спросите себя, сколько хэш-кодов может быть, если resut является целым числом? Теперь сколько строк может быть? –
Hashcode! = Адрес. Значение Hashcode обычно используется как индекс в хеш-таблице, но также часто переопределяется для получения лучшего хеша. – ArgumentNullException