자바에서 동등비교연산자 (==)와 equals() 메소드간의 차이가 무엇인가요?


제가 다음 사항들에 대해서 정확히 이해하고 있는지를 확인받고 싶습니다.

  • ==: 참조값을 비교. 즉 두 객체가 동일한 메모리 주소를 참조하는지를 비교
  • .euqls(): 객체의 데이터를 비교한 결과를 평가

제가 이해한 것이 맞나요?

  • 2016년 05월 20일에 작성됨

조회수 193


1 답변


좋아요
0
싫어요
채택취소하기

일반적으로 위 질문에 대한 답은 "맞습니다". 그러나...

  • equals() 메소드는 비교하기 위해 쓰여진 것만 비교합니다. 그 이상도 그 이하도 아니고요.

  • 만약 클래스에서 equals() 메소드를 오버라이드 하지 않는다면, 이 베소드를 오버라이드한 가장 가까운 슈퍼 클래스의 equals(Object o) 메소드가 기본입니다.

  • equals() 메소드를 오버라이드한 슈퍼 플래스가 없다면, 최상위 슈퍼클래스인 Object 클래스가 정의한 메소드 Object#equals(Object o)가 기본이 됩니다. 이것은 == 연산자와 동일한 결과를 보여줍니다. 즉, 동일한 객체를 참조하는 두 변수들에 대해서만 참을 반환합니다. 그래서 객체의 동일함과 비기능적 동일함을 테스트 하고자 하실 것입니다.

  • equals() 메소드를 오버라이드하려면 hashCode()도 오버라이드 해야 한다는 것을 항상 기억하세요. equals() 메소드가 두 객체의 값이 같다고 한다면, 두 객체에 대한 hashCode()로 부터 반환된 결과는 무조건 같아야 합니다. 그 반대 경우는 반드시 참은 아니지요.

  • 2016년 05월 21일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close