자바 에서 equals 의 이해

자바 에서 equals 의 이해
equals 의 역할
자바 에 서 는 equals()방법 으로 두 대상 의 등가 여 부 를 비교 합 니 다.새로운 데이터 형식 을 정의 할 때 등가 의 의 미 를 고려 한 다음 equals()방법 을 실현 해 야 합 니 다.
자바 의"="
자바 의"=="은 메모리 에 저 장 된 주 소 를 비교 합 니 다.따라서 같은 new 가 나 온 대상 이 아니면 비교 한 결 과 는 true 입 니 다.그렇지 않 으 면 비교 한 결 과 는 false 입 니 다.일반적으로
  • 기본 데이터 형식
  • 에 사용
  • 대상 의 인용 비교,즉 이들 이 같은 대상 의 서로 다른 인용 인지 여부
  • equals 의 쓰기:
  • 다시 쓰 는 방법 은
  • 과 유사 하 다.
    public boolean equals(Object obj) {
         
    	return this == obj;
    }
    
  • @Override 를 쓰 는 것 이 좋 습 니 다.컴 파일 러 가 재 작성 여 부 를 확인 해 줍 니 다
  • 우선 instanceof 또는 getClass()를 사용 하여 유형 이 일치 하 는 지 확인 합 니 다.
  • 그리고 유형 전환 을 하고 마지막 으로 클래스 의 특성 에 따라 작성 합 니 다
  • 예:
  • final class PhoneNumber {
         
      private short areaCode;
      private short lineNumber;
      private short prefix;
    
      @Override
      public boolean equals(Object o) {
         
        if (!(o instanceof PhoneNumber)) {
         
          return false;
        }
        PhoneNumber pn = (PhoneNumber) o;
        return pn.lineNumber == lineNumber 
        && pn.prefix == prefix 
        && pn.areaCode == areaCode;
      }
    }
    

    equals 쓰기 규범
  • Object 류 중 equals()를 재 작성 할 때 약속 을 만족 시 켜 야 합 니 다–i.등가 성(자 반,대칭,전달)–ii.일치 성 을 만족 시 켜 야 합 니 다.비교 에 사 용 된 정보 가 수정 되 지 않 은 상황 에서 여러 번 비교 결 과 는 똑 같 아야 합 니 다–ii.equals 방법 으로 똑 같은 두 대상 을 판단 합 니 다.그 hashCode 는 반드시 같은 결 과 를 만들어 야 합 니 다(상기 예시 에서 hashCode 를 다시 쓰 는 방법 이 없 음).이 유 는 아래–iv.빈 값 처리:x.equals(null)는 반드시 return false.–v.equals 는 모든 대상 의 전역 등가 관계(모든 대상 에 대해 효력 이 발생 함)
  • 해시:해시 표 의 조회 시간 은 상수(선형)이 고 성능 은 trees 나 lists 보다 좋 으 며 순서 나 다른 특수 한 요 구 를 배열 할 필요 가 없습니다.equals 와 hashCode 방법 을 제공 해 야 하 는 것 을 제외 하고–하나의 배열,데 이 터 는 hashcode 로 매 핑 되 어 배열 의 index 에 대응 합 니 다.hashcode 는 데이터 가 배열 에 저 장 된 위 치 를 결정 합 니 다–ii.hashcode 디자인 시 배열 slot 에 고 르 게 분포 되 어 있 는 지 확인 합 니 다.여러 key 가 같은 index 에 흩 어 졌 을 때(충돌)해시 표 는 하나의 목록 을 유지 하여 이 키 쌍(bucket)-ii.Objects.hash():자바 의 방법 을 기록 합 니 다.문장 여러 필드 에 따라 해시–v 를 자동 으로 생 성 합 니 다.equals 계산 에 사용 되 는 모든 필드 의 hashCode 를 통 해 hashCode
  • 를 다시 쓸 수 있 습 니 다.
  • 일부 collections 의 메커니즘-i.일부 collections 의 contact 방법 은 두 요소 가 같 는 지 비교 해 야 한다.먼저 hashCode()에서 발생 하 는 hashcode 를 이용 하여 slot(index)를 확인 하고 equals()방법 으로 bucket 에서 일치 하 는 데 이 터 를 찾 습 니 다.equals 가 같 으 면 hashcode 가 같 아야 합 니 다.그렇지 않 으 면 실수 하기 쉽 습 니 다.ii.equals 가 같 지 않 으 면 hashcode 가 같 을 지 는 모 르 지만(성능 향상)-ii.hashcode 를 구성 할 때 대상 의 모든 필드 를 고려 하여 같 지 않 은 대상 이 같은 hashcode-iv 를 만 들 지 않도록 하 는 것 이 좋 습 니 다.대상 이 변 하지 않 는 한 hashcode 는 수정 할 수 없습니다
  • 주의 하 다.
  • instanceof 에 안전 위험 이 존재 합 니 다.equals()방법 을 실현 하 는 것 을 제외 하고 instanceof 와 getClass()를 사용 하여 운행 할 때 대상 의 유형 을 검사 하고 안전 위험 이 존재 하 므 로 더욱 안전 한 대체 방법 을 사용 할 수 있 습 니 다!
  • 좋은 웹페이지 즐겨찾기