java 중===equal 과 의 차이 설명
String str1 = new String("str");
String str2 = new String("str");
System.out.println("== :"+ str1 == str2);
System.out.println("equal :"+ str1.equals(str2));
String str3 = "str1";
String str4 = "str1";
System.out.println("== :"+ str3 == str4);
System.out.println("equal :"+ str3.equals(str4));
출력의 답:인쇄 에 따 르 면 equal 비 교 를 사용 할 때 자동 포장 을 사용 하여 예화 하 든 new 로 예화 하 든 되 돌아 오 는 것 은 모두 true 이 고==은 다 릅 니 다.자동 포장 을 통 해 예화 하 는 것 은 true 이 고 new 로 되 돌아 오 는 것 입 니 다.
실례 적 으로 되 돌아 오 는 확실한 false;왜 그런 지 급 하 게 해결 하지 않 고 equals 와==의 차 이 를 먼저 알 아 보면 그때 답 을 알 수 있 습 니 다.
equals 방법 은 처음에 모든 종류의 기본 클래스 Object 에서 정 의 된 것 입 니 다.소스 코드 는?
public boolean equals(Object obj) {
return (this == obj);
}
여기 서 정 의 된 equals 와==은 같은 효 과 를 가 진 다 는 것 을 알 수 있 지만 위의 것 은 어떻게 다 를 수 있 습 니까?String 클래스 가 equals 를 다시 썼 기 때 문 입 니 다.
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
여기 서 equals 에 대해 다시 다섯 가 지 를 주의해 야 합 니 다.1 자 반성:임의의 인용 값 X,x.equals(x)에 대한 반환 값 은 true.2 입 니 다. 대칭 성:모든 인용 값 x,y 에 대해 y.equals(x)의 반환 값 이 true 일 때 x.equals(y)의 반환 값 은 반드시 true 입 니 다.3 전달 성:만약 x.equals(y)=true,y.equals(z)=true 라면 x.equals(z)=true 4 일치 성:비교 에 참여 한 대상 이 변 하지 않 았 다 면 대상 비교 결과 도 변 하지 말 아야 한다. 비어 있 지 않 음:비어 있 지 않 은 참조 값 X,x.equals(null)의 반환 값 은 false 입 니 다.
다시 쓰 면==과 본질 적 인 차이 가 있다.
equal:두 대상 내부 의 내용 이 동일 한 지 비교 하 는 데 사 용 됩 니 다.모든 클래스 는 java.lang.Object 클래스 에서 계승 되 기 때문에 이 방법 을 덮어 쓰 지 않 으 면 Object 클래스 의 방법 을 호출 합 니 다.Object 의 equal 방법 은==의 판단 을 되 돌려 줍 니 다.따라서 이 방법 을 덮어 쓰 지 않 으 면,이 방법 을 호출 하 는 것 은 아무런 의미 가 없다.자바 대상 을 대상 으로 하 는 처리 에서 우 리 는 일반적으로 javabean 에서 equals 를 다시 쓰 는 방법 을 선택해 야 합 니 다.hibenate 를 사용 한 후,우 리 는 데이터베이스 의 맵 파일 과 실 체 를 생 성 해 야 합 니 다.
클래스,이것 은 우리 가 실체 클래스 에서 equals 방법의 재 작성 을 하 는 것 이 좋 습 니 다.재 작성 할 때 우 리 는 자신의 정의 에 따라 이 방법 을 실현 할 수 있 습 니 다.예 를 들 어 한 student 류 에 대해
우 리 는 학 번 이 같 으 면 이 두 대상 이 같다 고 정의 한다.동시에 우 리 는 hashcode 방법 을 다시 써 야 한다https://www.jb51.net/article/42408.htm==:두 대상 의 주소 가 같 는 지,즉 같은 대상 을 가리 키 는 지 판단 하 는 데 쓰 인 다.비교 하 는 것 은 진정한 의미 의 지침 조작 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.