==와 equals, 어떨 때 사용해야 하지?

Board Name을 확인하고 비회원을 처리하는 과정에서 문자열 비교를 위해 == 연산자를 사용했으나, 에러가 발생하고 말았다.
문자열을 비교할 때는 == 연산자 대신 equals 메서드를 사용해야 한다는 것을 알게 되었다.
== 연산자는 객체의 주소 값을 비교하는 반면, equals 메서드는 객체의 값 자체를 비교하는 차이가 있다.

 

 

 

✨시작하며

전자정부 프레임워크 기반 프로젝트 중 게시판 Board Controller에서 Board Name이 지정한 값과 동일할 경우 해당 게시판에서 session값 검증을 통해 비회원을 따로 처리하는 조건문을 만들었다.

그런데 여기서 == 연산자를 사용하여 문자열을 비교하는 바람에 비회원일 경우에도 if문에 걸리지 않고 게시판 화면으로 정상적으로 넘어가버렸다.

기존의 코드들을 확인하고 검색하며 분석해본 결과 문자열에 대한 비교를 수행할 때 == 연산자가 아닌 equals 메서드를 사용해야 했다.

 

 

 

String의 주소 할당 방식

  1. 리터럴(literal)을 이용한 방식으로, string constant pool 영역에 존재한다.
  2. new 연산자를 이용한 방식으로, heap 영역에 존재한다.

 

 

 

== 연산자

객체가 동일한지 비교하지만, 객체의 문자열을 비교하지는 않는다.
동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용한다.

 

 

 

equals 메서드

자바에서 문자열을 비교할 때 사용한다.
비교하는 대상의 데이터 값을 비교해 String 생성 방식에 따라 결과가 달라지지 않는다.

 

 

 

두 방식의 차이

== 연산자는 비교하는 대상의 주소값을 비교한다.
equals 메서드는 비교하는 대상의 값 자체를 비교한다.

 

 

 

📜참고