java 중===equal 과 의 차이 설명

3041 단어 자바==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==:두 대상 의 주소 가 같 는 지,즉 같은 대상 을 가리 키 는 지 판단 하 는 데 쓰 인 다.비교 하 는 것 은 진정한 의미 의 지침 조작 이다.

좋은 웹페이지 즐겨찾기