자바 equals 방법 상세 설명
2142 단어 질문
두 대상 을 똑 같이 비교 하려 면 x. equals (y) 를 호출 해 야 합 니 다. 그러나 equals 방법 을 다시 쓰 지 않 으 면 기본적으로 object 류 의 equals 방법 을 사용 합 니 다.
public boolean equals(Object obj) {
return (this == obj);
}
한편, object 에서 equals 방법 은 이렇게 정 의 됩 니 다. 인용 주소 가 같 으 면 두 대상 이 같다 는 것 을 증명 합 니 다. 이것 은 충분 하지 않 습 니 다.
String 의 equals 방법:
object 의 equals 방법 을 다시 쓰 려 면 먼저 메모리 주 소 를 비교 한 다음 에 데이터 형식 을 비교 한 다음 에 문자열 의 길 이 를 비교 한 다음 에 모든 문자 의 비 교 를 합 니 다.
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
실제 개발 에서 두 개의 사용자 정의 대상 을 비교 하려 면 equals 방법의 재 작성 이 필요 하 다.
equals 방법 은 다음 과 같은 특성 을 따른다.
1. 자 반 성: 비어 있 지 않 은 인용 x, x. equals (x) 는 true 로 돌아 가 야 합 니 다.
2. 대칭 성, 모든 비공 식 인용 x, y 에 대해 x. equsla (y) = true 와 y. equals (x) = true 를 따라 야 합 니 다.
3. 전달 성: 모든 인용 x, y, z 에 대해 x. equsla (y) = true 라면 y. equals (x) = true
4. 일치 성: X 와 y 의 인용 이 변 하지 않 았 다 면 x. equsla (y) 를 반복 적 으로 호출 한 결 과 는 같 아야 합 니 다.
5. 임의의 비 공 인용 x, x. equals (null) 는 false 와 같 아야 합 니 다.
완전한 equals 사고방식: 예 를 들 어 x. equals (y)
1. 먼저 x = = y 를 검사 하고 주소 검 사 를 한다. 만약 같다 면 이것 은 빠 른 방식 이다.
2. y 가 null 인지 확인 하고 null 이면 false 로 돌아 갑 니 다.
3. x 와 y 가 같은 클래스 인지 확인 합 니 다. 이때 두 가지 검 측 방식 이 존재 합 니 다. 하위 클래스 의 부모 관계 가 존재 하지 않 으 면 마음대로 사용 할 수 있 습 니 다.
(1). instanceof 를 이용 하여 검사 합 니 다.
(2). getClass 를 이용 하여 검사 합 니 다 (하위 클래스 정의 동일 관계)
4. 그리고 필요 한 대비 속성 비교
만약 x. equals (y) 라면 x. hashCode 와 y. hashCode 는 반드시 같다.
equals 방법 을 다시 쓰 려 면 hashcode () 를 다시 정의 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
같은 객체 타입간의 할당 = 주소값 복사System 클래스에서 static 변수 in 은 null 로 초기화 되어 있지만, nullPointException 안뜬다. -> InputStream 타입의 객체가 생성되어 in 이 할당되어 있다는 뜻 객체(In...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.