본문 바로가기
카테고리 없음

[java] == 과 equals 의 차이

by tokkiC 2022. 4. 27.

a와 b가 같다고 표현할때 == 를 써서 a == b 로 쓰곤하였다
하지만 같다는 표현에는 equals 도 사용된다

값이 같다는 것을 표현했지만 엄밀하게 말해서 프로그래밍에서는 값이 같다는 것은 2가지로 해석가능하다

  1. 데이터 공간에 쓰여진 데이터 값이 같다
  2. 데이터 주소 값이 같다

이 뜻의 차이로 인해서 == 과 equals 가 다르게 된다

 


==

== 은 참조 주소가 없는 primitive type ( ex)int, boolean 등등 ) 끼리의 연산의 경우 데이터 자체의 값을 비교하지만
참조 주소가 있는 reference type ( ex) 문자열 String, 배열 array 등등) 의 연산의 경우 주소값을 비교한다
정확하게 말하자면 primitive type 의 경우 값이 같으면 주소값이 모두 같으므로 값만 비교하면 되는 것이다

코드를 입력하면 변수명은 stack 에 쌓이지만 값은 heap 의 주소값을 참조하게 되어있다

위의 경우에서 str1과 str3 와 str4 의 경우 heap에서의 주소값이 모두 다르다
때문에 주소값이 같은지 비교하는 ==으로는 에러가 난다

이럴때 equals 를 사용하면 str1과 str3 와 str4 모두 주소값이 다르지만 쓰여진 데이터 값에 대해서만 비교가능하다

또한 equals 의 경우 str3.equals 등의 형태로 사용하는데 이는 메소드이기 때문이다 (문자열 타입의 경우도 클래스에 해당)
equals(); 는 주소의 데이터를 풀어 데이터 값만 해석해서 비교하라는 메소드인 것이다


결론적으로 말해서

데이터 주소로 비교하려면 ==

데이터 주소에 상관없이 내부에 쓰여진 값 만으로 비교하려면 equals

를 사용하면 된다

댓글