프로그래밍/JAVA

JAVA에서 equals와 ==의 차이

Dibrary 2022. 3. 17. 10:00
반응형

안녕하세요 Dibrary입니다.

 

저도 자주 헷갈리는 내용인 equals와 ==에 대해 정리 해 두고자 합니다.

먼저 간단하게 요약해보면, 

  • equals는 값만을 비교합니다.
  • ==는 주소값을 비교합니다.

 

저도 이렇게 '외우고' 사용하지만 정작 가끔씩 혼돈이 오곤 합니다. 

 

코드를 보죠.

tmp와 ttt라는 변수는 같은 글자(리터럴, 값, 문자 등으로 바꿔 말할 수 있습니다.)를 가지고 있습니다.

출력 결과는 아래와 같습니다.

어? 분명 == 를 사용하면 주소값을 비교한다고 했는데, 주소값이 같다고 나오네요.
바로 여기서 제가 혼란이 온 것입니다.

 

대부분 ==와 equals를 비교하는 예시 코드로 아래와 같이 변수를 설정합니다.

당연히 ttt는 tmp를 가리키니까, 주소가 같다고 나오는 것은 이해가 되는데, 
ttt를 따로 선언 했음에도 주소가 같이 나오기에 의아했습니다.

 

그러면, 가정이 잘못 된 것이겠죠? '변수의 값이 같더라도 따로 선언하면 주소가 다를 것이다' 고 생각한 것이 뭔가 문제가 있는 것입니다.

 

그래서 찾아보니, 아래와 같은 설명이 있습니다.

jvm은 변수를 선언할 때, 같은 문자를 가진 변수가 이미 기존에 존재한다면, 해당 주소를 참조한다.

즉, 이미 "alpha"라는 변수가 있었기 때문에, 새로 변수를 선언한다 한들, 기존 변수의 주소를 참조해서 ttt변수가 만들어진 것입니다. 그래서 주소도 같았던 것이죠.

참조 값과 주소가 같으니 이 경우는 ==와 equals 모두 같다고 인지합니다.

 


문자열 변수를 new로 생성하면 ==와 equals의 결과는 다릅니다.

주소 값이 다르게 나오는 것을 확인 할 수 있습니다.

따라서 ==의 결과는 다르다고 인지하고, 값은 둘 다 "alpha"로 같기 때문에 equals는 같은 것으로 판단합니다.

728x90
반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[RxJAVA] 리액티브자바 프로그래밍 시작하기!  (0) 2022.04.21
OpenJDK 를 STS에 적용하기  (0) 2022.01.26