새소식

반응형
250x250
개발기록/JAVA

문자열 비교할 때 equls와 == 의 차이는 무엇일까?

  • -
728x90
반응형

상황

회사에서 이메일을 발신하는 기능이 있다.
원래는 등록자와 담당자에게만 갔는데, 처리자에게도 발신하도록 하는 기능을 추가하기로 하였다.
추가를 하면서 이전 값과 새로운 값 즉 문자열에 대해 비교를 하여 분기를 해야하는데 equals가 아닌 == 으로 했더니 내가 원하던 조건이 성립되지 않았다.

원인 파악

chatGpt에 물어봤더니 아래와 같이 답해줬다.
복사하기 붙혀넣기가 아닌 일부 내용만 발췌해서 적었다.

== 연산자

  • 기본 자료형(int, char, boolean 등)은 값을 비교한다
  • 객체에서는 참조(메모리 주소)를 비교한다.
  • 즉, 두 객체가 동일한 메모리 주소를 가리킬 때만 true를 반환
String a = new String("hello");
String b = new String("hello");

System.out.println(a == b); // false, a와 b는 서로 다른 메모리 주소를 가리킨다

equals 메소드

  • 간단하다.
  • 객체의 값을 비교한다.
  • String, Integer 등 많은 Java Class는 equals 메소드를 override하여 값 비교를 수행하도록 구현되어있다.
String a = new String("hello");
String b = new String("hello");

System.out.println(a.equals(b)); // true, a와 b의 값을 비교

해결

그래서 나는 == 연산자가 아닌 equals 메소드를 사용하여 값 비교를 하였고, 내가 원하던 로직으로 처리를 할 수 있었다.

느낀점

빠른 구현을 위해서 chatGPT에게 물어보긴 하였지만, Java의 Class를 먼저 찾아볼걸이라는 생각을 했다.
이토록 간단한 방법인데 이걸 몰랐다는게 난 아직 미숙하고 겸손하고 배워야할게 많다고 생각됬다.
앞으론 이런 실수를 하지 않도록 해야겠다.

그리고 간단했던 것이더라도 이렇게 기록을 남겨 복기를 해야곘다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.