자바에서 동등비교연산자 (==)와 equals() 메소드간의 차이가 무엇인가요?
조회수 2473회
제가 다음 사항들에 대해서 정확히 이해하고 있는지를 확인받고 싶습니다.
==
: 참조값을 비교. 즉 두 객체가 동일한 메모리 주소를 참조하는지를 비교.euqls()
: 객체의 데이터를 비교한 결과를 평가
제가 이해한 것이 맞나요?
1 답변
-
일반적으로 위 질문에 대한 답은 "맞습니다". 그러나...
equals() 메소드는 비교하기 위해 쓰여진 것만 비교합니다. 그 이상도 그 이하도 아니고요.
만약 클래스에서 equals() 메소드를 오버라이드 하지 않는다면, 이 베소드를 오버라이드한 가장 가까운 슈퍼 클래스의
equals(Object o)
메소드가 기본입니다.equals() 메소드를 오버라이드한 슈퍼 플래스가 없다면, 최상위 슈퍼클래스인 Object 클래스가 정의한 메소드
Object#equals(Object o)
가 기본이 됩니다. 이것은==
연산자와 동일한 결과를 보여줍니다. 즉, 동일한 객체를 참조하는 두 변수들에 대해서만 참을 반환합니다. 그래서 객체의 동일함과 비기능적 동일함을 테스트 하고자 하실 것입니다.equals()
메소드를 오버라이드하려면hashCode()
도 오버라이드 해야 한다는 것을 항상 기억하세요.equals()
메소드가 두 객체의 값이 같다고 한다면, 두 객체에 대한hashCode()
로 부터 반환된 결과는 무조건 같아야 합니다. 그 반대 경우는 반드시 참은 아니지요.
댓글 입력