2011-04-30 2 views
4

이 코드는 다음과 같습니다.두 Java 연산자의 차이 :! = vs! equals

elem1!=elem2 

이 이에 해당합니까?

!elem1.equals(elem2) 

두 가지 방법으로 컴파일되지만, 아직 확실하지 않습니다 ...

+10

어떤이는 제네릭 할 필요가 않습니다 (물론, 널 제외) 오버라이드 (override)하지 않는 개체에 대해 동일합니다? –

+0

난 그냥 아무것도 깨닫지 못했다. – bluehallu

+0

어림짐작의 일반적 규칙으로, 당신은 ==와! = 연산자를 원시 타입 이외에는 사용하지 말아야한다. Oli와 Matti의 해답을 참조하십시오. –

답변

8

== (그리고 확장자는 !=) 개체 ID를 확인하십시오. 즉, 두 개체가 모두 동일한 인스턴스를 참조하는지 확인하십시오. equals은 일반적으로 객체의 "값"이 동일한 지 여부에 관계없이 높은 수준의 신원 개념을 확인합니다. 이것이 의미하는 바는 해당 객체에 equals을 구현 한 사람입니다. 그러므로 그들은 같은 것이 아닙니다.

두 인스턴스가 같지 않은 일반적인 예는 서로 다른 두 인스턴스가 동일한 내용 (문자의 문자열)을 가질 수있는 문자열입니다.이 경우 ==은 false이지만 equals은 true를 반환합니다.

(Object에) equals의 기본 구현은 내부 == 사용하므로 결과는 equals

7

, 더 그들은 같은 아니에요 없습니다. 첫 번째 버전에서는 elem1elem2이 동일한 객체에 대한 참조인지 여부를 확인합니다 (기본 유형이 아니라고 가정). 두 번째 버전은 특정 의미의 메소드를 호출하여 두 개의 (아마도 별개의) 객체가 어떤면에서 "동등"한지 여부를 확인합니다 (종종 모든 멤버 필드가 동일하다는 검사 일뿐입니다).

제네릭과 관련이 없다고 생각합니다.