그래도 모르는건 알고 넘어가자.
: int, boolean과 같은 primitive type
에 대해서는 값
을 비교한다.
reference type
에 대해서는 주소값
을 비교한다.
(엄밀히 따지자면 primitive type도 Constant Pool (리터럴 상수 값을 저장하는 곳) 에 있는 특정 상수를 참조하는 것이기 때문에 결국 주소값을 비교하는 것으로 볼 수 있긴 하다.
같은 상수를 참조하면 주소값이 같으니 결국 같은 값이면 동일하다고 판단할 수 있기 때문)
: 자바 최상위 클래스 Object
클래스에 존재하는 native method
그렇기 때문에 모든 하위 클래스에서 재정의 해 사용할 수 있다.
(이는 즉, 사용자가 어떻게 재정의 하느냐에 따라 원하는 기준으로 비교할 수 있다.)
보통 String 타입을 비교할 때 내용이 같은지 비교한다고 한다. (String 클래스에서 equals()를 문자열 내용이 같으면 true를 리턴하도록 재정의했기 때문
➡️ 서로 다른 객체라도 같은 문자열을 가지면 동일하다고 판단)
String은 문자열을 바로 참조할 경우 같은 주소값을 가질 수도 있다.
➡️ 동일한 문자열 상수를 참조하고 있다면(같은 문자열이라면) 주소값이 동일
그래서 같은 문자열이라고 할 때 같은 주소를 참조하고 있을 뿐더러 문자열의 한 글자씩 비교해도 동일하기 때문에 ==
든 equals()
든 True의 결과를 얻을 수 있는 것이다.