[Java] [TIL] == 연산자와 equals()

윤경·2021년 8월 22일
0

Java

목록 보기
8/10

그래도 모르는건 알고 넘어가자.

참고


✔️ == 연산자

: int, boolean과 같은 primitive type에 대해서는 을 비교한다.

reference type에 대해서는 주소값을 비교한다.

(엄밀히 따지자면 primitive type도 Constant Pool (리터럴 상수 값을 저장하는 곳) 에 있는 특정 상수를 참조하는 것이기 때문에 결국 주소값을 비교하는 것으로 볼 수 있긴 하다.

같은 상수를 참조하면 주소값이 같으니 결국 같은 값이면 동일하다고 판단할 수 있기 때문)


✔️ equals()

: 자바 최상위 클래스 Object 클래스에 존재하는 native method

그렇기 때문에 모든 하위 클래스에서 재정의 해 사용할 수 있다.

(이는 즉, 사용자가 어떻게 재정의 하느냐에 따라 원하는 기준으로 비교할 수 있다.)

보통 String 타입을 비교할 때 내용이 같은지 비교한다고 한다. (String 클래스에서 equals()를 문자열 내용이 같으면 true를 리턴하도록 재정의했기 때문
➡️ 서로 다른 객체라도 같은 문자열을 가지면 동일하다고 판단)

String은 문자열을 바로 참조할 경우 같은 주소값을 가질 수도 있다.
➡️ 동일한 문자열 상수를 참조하고 있다면(같은 문자열이라면) 주소값이 동일


그래서

그래서 같은 문자열이라고 할 때 같은 주소를 참조하고 있을 뿐더러 문자열의 한 글자씩 비교해도 동일하기 때문에 ==equals()든 True의 결과를 얻을 수 있는 것이다.

profile
개발 바보 이사 중

0개의 댓글