[Java] 해시코드와 equals의 재작성

2425 단어 Java
1. Object의 HashCode() 및 equals()


위에서 말한 바와 같다
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

좋은 웹페이지 즐겨찾기