Equals

2127 단어 자바J#
equals 우 리 는 모두 다른 어떤 대상 이 이 대상 과 같 는 지 를 지시 하 는 것 임 을 안다.
Object 류 의 equals 방법 은 대상 상의 차이 가능성 이 가장 큰 동일 관 계 를 실현 합 니 다.즉,비어 있 지 않 은 인용 값 x 와 y 에 대해 x 와 y 가 같은 대상 을 인용 할 때 만 이 방법 은 true(x==y 가 값 true)로 돌아 갑 니 다.
여기 서 내 가 말 하고 자 하 는 것 은 우리 프로그램 에서 오류 가 발생 하 는 경우 가 많다 는 것 이다.바로 이 equals 방법 이 던 진 빈 포인터 이상 이다.
예 를 들 면:

 if(dis.readLine().equals("asdasdasd")){
 ...
 }

우 리 는 일반적으로 이렇게 쓰 여 있 지만 이렇게 쓰 는 것 을 모른다.만약 에 dis 가 빈 메 시 지 를 읽 거나 다른 이상 으로 인해 dis 가 데 이 터 를 전혀 읽 지 못 하면 이 if 는 빈 지침 이상 을 던 질 것 이다.
일반적으로 우 리 는 알 수 없 는 String 에 대해 상수 와 비교 할 때 가장 좋다.

 if("asdasdasd".equals(dis.readLine())){
 ...
 }

이것 도 우리 가 일치 하 는 것 이 비어 있 는 것 입 니까?

 if("".equals(dis.readLine()) || null ==dis.readLine()){
 ...
 }

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;
    }

한 가지 더 말씀 드 리 겠 습 니 다.
byte[]비 교 는 요?

 String[] a = new String[]{"1","2"};
 String[] b = new String[]{"1","2"};
 if(a.equals(b)){
  ...
 }
 }

이러 면 안 돼.왜?equals 소스 보기

 public boolean equals(Object obj) {
	return (this == obj);
    }

그것 은 두 Object 가 비교 하고 있 는 것 으로'=='을 사용 하고 비교 하 는 두 대상 의 주소 로 분명히 안 된다.
그래서 비교 할 때 반드시 빈 것 으로 고려 해 야 한다.equals 와 도대체 비교 하 는 것 이 무엇 인지.

좋은 웹페이지 즐겨찾기