면접: 왜 hashCode () 와 equals () 방법 을 다시 써 야 합 니까?
2608 단어 JAVA
//Object equals()
public boolean equals(Object obj) {
return (this == obj);
}
내 부 는 '= =' 을 사용 하여 같은 대상 을 가리 키 는 지 비교 합 니 다.따라서 equals 방법 을 덮어 쓰 지 않 을 때 equals 방법 과 = 의 비교 결 과 는 같 습 니 다.(링크: 자바 의 equals () 와 "= =" 의 차이 점)
2. 언제 equals 방법 을 덮어 써 야 합 니까?
우 리 는 그것들 이 같은 대상 을 가리 키 는 지 아 닌 논리 적 으로 같은 지 알 고 싶 을 때, 우 리 는 equals 방법 을 덮어 써 야 한다.
equals 방법 을 덮어 쓰 는 일반적인 약속:
1. 자 반성 null 이 아 닌 인용 값 에 대해 x. equals (x) = true
2. 대칭 성 은 null 이 아 닌 모든 인용 값 x, y, x. equals (y) = y. equals (x)
3. 전달 성 null 이 아 닌 인용 값 x, y, z, x. equals (y) = = true, y. equals (z) = = true, --- x. equals (z) = = true
4. 일치 성 null 이 아 닌 인용 값 x, y 에 대해 서 는 equals 의 비교 작업 이 대상 에서 사용 하 는 정보 가 바 뀌 지 않 으 면 x. equals (y) 를 여러 번 호출 하여 돌아 오 는 값 이 변 하지 않 습 니 다.
5. null 이 아 닌 인용 값 x, x. equals (null) 는 false 로 돌아 가 야 합 니 다.
equals () 방법 을 실현 하 는 작은 기술:
1. = = 연산 자 를 사용 하여 매개 변수 가 이 대상 의 인용 인지 확인 하고 true 로 직접 돌아 갑 니 다.
2. intance 연산 자 를 사용 하여 매개 변수 가 정확 한 유형 인지 확인 합 니 다.
3. 매개 변 수 를 정확 한 유형 으로 변환 합 니 다.
4. 이 클래스 의 모든 관건 도 메 인 에 대해 매개 변수 중의 도 메 인 이 이 대상 에 대응 하 는 도 메 인 과 일치 하 는 지 확인 합 니 다.일치 하지 않 을 가능성 이 가장 높 은 도 메 인 을 먼저 비교 합 니 다.
5. equals 방법 을 덮어 쓸 때 항상 hashCode 방법 을 덮어 씁 니 다.
6. equals 성명 의 Object 대상 을 다른 대상 으로 교체 하지 마 십시오.
3. 왜 equals 방법 을 덮어 쓸 때 항상 hashCode 방법 을 덮어 씁 니까?
이렇게 하지 않 으 면 Object. hashCode 의 일반적인 약속 을 위반 하여 해시 기반 의 모든 집합 (HashMap, HashSet, HashTable) 과 결합 하여 정상적으로 작 동 하지 못 하기 때문이다.
프로젝트 에서 HashMap 을 자주 사용 하기 때문에 면접 을 볼 때 기본적으로 이 질문 을 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.