[JAVA] ==와 equals()의 차이점

SangJin Ham·2024년 1월 30일
0

JAVA

목록 보기
8/15
post-thumbnail

==와 equals()의 차이점

문자열 acat라는 문자열이 저장되어 있으며,
문자열 bcat라는 문자열이 저장되어 있다.

그렇게 두 문자열이 같은지 확인했는데 false가 나왔다.

왜 이런 결과가 나오게되는지 알아보자.

객체의 주소값

위처럼 문자열의 내용이 같더라도, 어떤 방법으로 선언하였는지에 따라 주소(참조)값이 달라질 수 있다.

// 리터럴로 선언
String str1 = "cat";
String str2 = "cat";
// new 연산자로 선언
String str3 = new String("cat");
String str4 = new String("cat");
  • 리터럴로 선언 : Heap 영역 내의 String Pool이라는 영역에 같은 값의 문자열을 공유해 메모리 사용량을 최적화므로, str1str2의 주소값은 같다.

    • String Constant Pool : Java에서 문자열 리터럴을 저장하는 독립된 영역
  • new 연산자로 선언 : Heap 영역 내에 별도로 저장되며 다른 주소값을 할당받는다.

== 연산자

== 연산자는 두 문자열의 주소(참조)값이 같은지 비교한다.
즉, 두 객체가 메모리에서 동일한 위치를 가리키는지 확인하는 것이다.

String str1 = "cat";
String str2 = "cat";
String str3 = new String("cat");

System.out.println(str1 == str2);		// true
System.out.println(str1 == str3);		// false

리터럴로 선언한 str1str2는 주소값이 같으므로 true를 리턴한다.
하지만 리터럴로 선언한 str1과 new 연산자로 생성한 객체 str3는 주소값이 다르므로 false를 리턴한다.

equals() 메소드

equals() 메소드는 두 문자열의 내용을 비교한다.
즉, 두 문자열이 동일한 값을 가지고 있는지 확인하는 것이다.

String str1 = "cat";
String str2 = "cat";
String str3 = new String("cat");

System.out.println(str1.equals(str2));		// true
System.out.println(str1.equals(str3));		// true

str1, str3는 주소 값이 다르더라도 두 문자열이 같으므로, true를 리턴한다.

마무리

문자열의 내용을 비교할 때는 == 연산자보단 equals() 메소드를 사용하는 것이 좋다.

profile
끄적끄적

0개의 댓글