Object 클래스의 equals 메서드 및 hashcode 메서드 분석

2414 단어 javaEEJavaSE

Object 클래스의 equals 메서드 및 hashcode 메서드 분석


equals


소스 코드

public boolean equals(Object obj) {
   return (this == obj);
}

개술


다른 객체가 해당 객체와 동일한지 여부를 나타냅니다.equals 메서드는 빈 객체가 아닌 참조에서 등가 관계를 형성합니다.
  • 자반성: 임의의 비공식 인용값 x에 대해 x.equals(x)true
  • 를 되돌려줍니다
  • 의 대칭성: 임의의 비공식 인용값 x와 y에 대해 x.equals(y)true를 되돌려주고 y.equals(x)도true
  • 를 되돌려준다.
  • 전달성: 임의의 비공식 인용값 x, y와z에 대해 x.equals(y)true를 되돌려주고 y.equals(z)가true를 되돌려주면 x.equals(z)도true
  • 로 되돌려준다.
  • 일치성: 임의의 비공식 인용값 x와 y에 대해 여러 번 호출x.equals(y)하거나 일치하는 반환true 또는 일치하는 반환false
  • 임의의 비공식 인용값 x에 대해x.equals(null)false를 되돌려줍니다.

  • Object 클래스의 equals() 메서드는 객체 비교에서 가장 가능성이 높은 동일 관계를 갖습니다.즉, 임의의 비공식 인용 값 x와 y에 대해, x와 y가 같은 대상을 인용할 때 ((x == y 만true를 되돌려줍니다)true를 되돌려줍니다.equals()가 다시 쓸 때마다hashCode() 방법도 다시 써야 한다는 것을 주의하세요.따라서 hashCode() 방법의 계약을 유지하기 위해 equals() 방법으로 성명한 동일한 대상은 반드시 동일한 해시 코드(산열값)를 가져야 한다.

    hashCode


    소스 코드

    public native int hashCode();

    개술


    대상의 해시 코드를 되돌려줍니다.이 방법은 해시표의 좋은 점을 지지한다. 예를 들어 HashMap.hashCode의 계약은 다음과 같다.자바 프로그램의 실행 과정에서 이 방법을 여러 번 호출할 때마다 hashCode 방법은 같은 정수를 되돌려야 합니다.대상의 equals 비교에서 어떤 정보도 수정되지 않았다.한 응용 프로그램의 실행 과정이 같은 프로그램의 다른 실행 과정에 이르기까지 이 정수는 일치할 필요가 없다.2. 만약에 두 대상이 equals(Object) 방법으로 비교한 결과가 같다면 두 대상에서 hashCode 방법으로 생성된 해시 코드는 반드시 같아야 한다.3. 만약에 두 대상이 equals(Object) 방법을 통해 비교한 결과가 같지 않다면 두 대상에서 hashCode 방법을 호출하여 생성한 해시 코드도 같을 필요가 없다.그러나 프로그래머는 서로 다른 대상을 위해 서로 다른 정수를 생성하면 해시표의 성능을 향상시킬 수 있다는 것을 알아야 한다.
    합리적이고 실행 가능한 것이라면 Object류 정의hashCode 방법을 통해 서로 다른 대상에게 서로 다른 해시 코드를 생성할 수 있다.(이것은 보통 대상의 메모리 주소를 해시 코드로 바꾸어 실현하지만, 이러한 실현 기술은 자바 언어로 실현할 필요가 없다)
    참조 링크:https://docs.oracle.com/javase/8/docs/api/

    좋은 웹페이지 즐겨찾기