아이디어 기본 테이프 의 equals 와 hashcode 로 인 한 bug 해결

1710 단어 ideaequalshashcode
아이디어 기본 테이프 의 equals 와 hashcode 로 인 한 bug
최근 규범 에 따라 아 이 디 어 를 통일 적 으로 사용 하고 있 으 며,사용 하 는 버 전 은 2017.4 입 니 다.
실체 클래스 를 만 들 고 추가 할 때 아이디어 의 단축 키 를 사용 하여 equals 와 hashcode 방법 을 자동 으로 생 성 합 니 다.
2 개 속성 을 선택 하여 생 성


그리고 list 에 추 가 했 더 니 중복 기록 이 계속 나 왔 습 니 다.디 버 깅 반나절 동안 발견 되 었 습 니 다.
if(!super.equals(o)) return false;이 문장 은 인용 비 교 를 하 는데 같은 종류 가 있 으 면 바로 되 돌아 와 문제 가 생 긴 다.
이치 에 따 르 면 저 는 속성 을 비교 하 는 것 을 선 택 했 습 니 다.똑 같이 인용 할 수 없 을 것 입 니 다.그래서 2017.3.4 분 버 전의 자동 생 성 equals 와 hashcode 는 신중 하 십시오.
정확 한 것 은 다음 과 같 아야 한다.

질문
기본 적 인 상황 에서 초 클래스 Object 에서 계승 한 equals 방법 과'=='은 완전히 등가 이 고 대상 의 메모리 주 소 를 비교 할 수 있 습 니 다.그러나 우 리 는 equals 방법 을 다시 써 서 우리 가 원 하 는 방식 으로 비교 할 수 있 습 니 다.예 를 들 어 String 류 는 equals 방법 을 다시 써 서 메모리 주소 가 아 닌 문자 의 서열 을 비교 할 수 있 습 니 다.
hashcode 는 해시 데이터 에 대한 빠 른 액세스 입 니 다.예 를 들 어 HashSet/HashMap/Hashtable 류 를 이용 하여 데 이 터 를 저장 할 때 저장 대상 의 hashcode 값 에 따라 같은 지 여 부 를 판단 합 니 다.
이렇게 하면 만약 에 우리 가 한 대상 에 대해 euqals 를 다시 썼 다 면 대상 의 구성원 변수 값 이 모두 같 으 면 euqals 는 true 와 같 지만 hashcode 를 다시 쓰 지 않 는 다 는 뜻 이다.그러면 우 리 는 새로운 대상 을 다시 썼 다.원래 의 대상.equals(새로운 대상)가 true 와 같 을 때 이들 의 hashcode 는 다르다.이 로 인해 이해 의 불일치 가 생 길 것 이다.해시 집합 을 저장 할 때(예 를 들 어 Set 류)두 개의 값 과 같은 대상 이 저 장 됩 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기