String은 왜 .equals로 비교할까

dike·2021년 11월 21일
0

if문에서 변수를 비교할 때 ==을 자주 사용한다. 그런데 String은 ==을 사용하여 비교하면
에러가 난다. 그 이유가 무엇인지 알아보자

작동방식

==

  • 동등비교연산자라고 불리는 이것은 기본형을 비교할 때 쓰인다. 비교할 때 두 변수의 주소가 같은지 확인한다.
int p1 = 4;
int p2 = 4;
  • 위 코드에서 p1과 p2는 4가 저장되어있는 같은 곳을 가리키고 있다. 즉, 두 변수의 주소가 같다.
    (기본형 변수는 메모리에서 같은 값을 여러개 만들지 않는다.)

.equals()

  • String 클래스의 .equals()는 먼저 매개변수로 들어온 객체의 주소와 자기 자신의 주소가
    같으면 true를 리턴한다.
  • 주소가 다르면 문자열을 하나씩 비교해보면서 모두 같으면 true를 리턴하고 다르면 false를 리턴한다.

String에 ==을 사용하면 에러가 발생하는 이유

  • String은 같은 내용이어도 다른 주소값을 가지고 있을 수 있다. 다음의 코드를 보자
String s1 = new String("Hello");
String s2 = new String("Hello");

String s3 = "Hello";
String s4 = "Hello";
  • 첫줄의 코드에서 새로운 String객체가 만들어진다. 두번째 줄에서 또 새로운 String 객체가 만들어진다. 두 객체는 다른 주소값을 가지고 있다. 하지만 내용은 같다.
  • String객체를 비교할 때 우리는 내용이 같은지 비교하고 싶지만 주소가 다를 수 있기 때문에
    .equals()를 사용하면 안전하게 비교할 수 있다.

0개의 댓글