[Java] 해시코드와 equals의 재작성
2425 단어 Java
위에서 말한 바와 같다
equals () 는obj의 주소를 비교했다.
hashCode()는 native에서 계산됩니다.즉 C/C++ 측면에서 계산한다.
이렇게 하면 비교==가짜가 된다.
2. String의 HashCode() 및 equals()
String은 object를 상속받았습니다.
String은 HashCode()와 equals()를 다시 썼습니다.
상기 equals
1、같은 주소의object라면 정말
2. 비교 문자열의 클래스가 String이 아니면 가짜입니다.
3. 비교 문자열의 클래스 길이가 같지 않으면 가짜
4, 순환 비교, 만약 틀리면 가짜
5、순환 완성 후, 정말
3. 자비HashCode() 및 equals()
private static class Person {
int age;
String name;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " - " +age;
}
/**
* @desc
*/
@Override
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(this == obj){
return true;
}
if(this.getClass() != obj.getClass()){
return false;
}
Person person = (Person)obj;
return name.equals(person.name) && age==person.age;
}
@Override
public int hashCode() {
return this.name.hashCode();
}
}
샘플 코드https://github.com/YanHengGo/java/tree/master/04_hashcode
Reference
이 문제에 관하여([Java] 해시코드와 equals의 재작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YanHengGo/items/8f122ff9fd613dd45d91텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)