Integer의 equals 방법

1598 단어 배우다
코드를 쓸 때 Integer에도 equals 방법이 있다는 것을 발견했다.그렇다면 그것과string의 equals 방법은 어떤 차이가 있습니까?
Integer 메소드 소스:
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

비교의 대상을 Integer 유형으로 볼 수 있고, 그렇지 않으면 int 기본 유형으로 바꾸어 ==로 비교하면 비교가 수치입니다.그러니까 특별한 걸로.
코드 테스트:
                Integer q=300;
		Integer w=300;
		Integer e=100;
		Integer f=100;
		if (q==w){
			System.out.println(" == **********"+"q w "+"***********");
		}
		if (e==f){
			System.out.println(" == **********"+"e f "+"***********");
		}
		if(q==300){
			System.out.println(" == **********"+"q 300 "+"***********");
		}
		if(q.equals(w)){
			System.out.println(" equals **********"+"q w "+"***********");
		}
		if(e.equals(f)){
			System.out.println(" equals **********"+"e f "+"***********");
		}

결과 출력:
==**********e 및 f 일치 성공*************=******q 및 300 일치 성공***************equals**************q 및 w 일치 성공********************equals********** e 및 f 일치 성공************************
q와 w의 첫 번째 "= ="일치가 성공하지 못했다는 것을 발견할 수 있어야 한다.
자료를 찾아보면 Integer에 캐시 그룹이 있다는 것을 알 수 있다. 즉, -128<=value<=127이다. 모두 캐시 그룹에서 Integer 대상을 얻는다.테스트 중인 q와 w는 모두 캐시 값을 초과하여 new의 새로운 대상이기 때문에 ==일치하지 않습니다.그래서 우리는 Integer의 "=="방법이 주소를 비교하는 것을 이해하기 어렵지 않다.Integer의 equals 방법은 이런 문제가 없고 직접적인 비교이다.
따라서 Integer를 사용하여 비교할 때 캐시 배열의 영역을 초과했는지 여부를 구분합니다.

좋은 웹페이지 즐겨찾기