Java

Java에서 String 비교

cinnamonbrown 2026. 3. 16. 16:11

String 비교 == VS equals()

이번 글에서는 Java에서 문자열을 비교할 때 어떤 방법을 사용해야 하는 지에 대해 정리해보려고 합니다.

Java를 처음 배우다 보면 다음과 같은 코드를 작성하게 됩니다.

if(str1==str2)

 

하지만 String 비교에서는 == 대신 equals()를 사용해야 합니다.

 

왜 그런 지 알아보기 전에 Java에서 문자열을 생성하는 방법부터 간단히 짚고 넘어가겠습니다.

✅ String 클래스에서 문자열을 생성하는 방법

Java에서 문자열을 만드는 방법은 2가지입니다.

① 문자열 리터럴 사용

String str1= "hello";
String str2= "hello";

이 방법은 문자열 리터럴을 사용하는 방식입니다.

Java에서는 문자열을 매우 자주 사용하기 때문에

메모리 효율성과 성능 최적화를 위해 문자열 풀(String Pool)이라는 공간을 이용합니다.

위의 예시처럼 프로그램이 실행될 때 "hello" 같은 문자열 리터럴이 등장하면

문자열 풀에 String 객체를 미리 만들어 둡니다.

그리고 이미 같은 문자열이 존재한다면
새로운 객체를 만들지 않고 기존 객체를 사용합니다.

위의 예시에서는
"hello" 문자열은 String Pool에 하나만 생성 되고

str1str2는 같은 객체를 참조하게 됩니다.

 

② 객체 생성 방식

String str3=new String(“hello”);
String str4= new String(“hello”);

이 방법은 new String()을 이용해 새로운 객체를 생성하는 방법입니다.

이 방식은 문자열 내용이 같더라도 항상 새로운 String 객체를 생성합니다.

✅ String 비교는 무조건 equals()

String 클래스를 비교할 때는 == 연산자가 아니라 항상 equals() 메서드를 이용해야 합니다.

그 이유는 다음과 같습니다

 

비교 방법 의미
== 객체의 참조값(주소) 비교
equals() 문자열 내용 비교

 

실제 코드로 확인해봅시다.

    String str5=new String("hello");
    String str6= new String("hello");

    System.out.println("str5==str6  : "+ (str5==str6));
    System.out.println("str5.equals(str6) : "+ str5.equals(str6));

실행 결과

str5==str6  : false
str5.equals(str6) : true

왜 이런 결과가 나올까?

먼저 str5==str6 의 결과는 false입니다.

 

그 이유는 str1과 str2가 서로 다른 객체를 참조하고 있기 때문입니다.

System.out.println("str5="+ System.identityHashCode(str1));
System.out.println("str6="+ System.identityHashCode(str2));

위 코드에서는 "hello"라는 문자열은 같지만

new String()을 사용했기 때문에 각각 새로운 객체가 생성됩니다.

그래서 참조값이 서로 다르게 됩니다.

실제 참조값 확인해보기 (실행 결과)

str5=1922154895
str6=883049899

 

이렇게 두 변수의 값이 서로 다른 것을 보면 서로 다른 객체라는 것을 확인할 수 있습니다.

그래서 == 연산의 결과가 false가 되는 것입니다.

그렇다면 equals()는 왜 true일까?

equals() 메서드는 앞서 설명한 것처럼 두 객체의 내용을 비교하는 것이기 때문에 true를 반환합니다.

 

 

💭 정리하며..

 

String 비교에서는 다음을 기억하면 됩니다.

비교 방법 의미
== 객체의 참조값(주소) 비교
equals() 문자열 내용 비교

오늘 예시로 다룬 str1~str4를 함께 통합해서 한 번 정리해보겠습니다.

먼저 str1과 str2는 == 연산에서 true(같은 참조값을 가지기 때문에) 또, equals()연산에서는 true를 반환합니다.

반면에 str3과 str4는 == 연산에서는 false(다른 참조값을 가지기 때문에) equals()연산에서는 true를 반환합니다.

보통 문자열을 비교할 때는 객체의 주소가 아니라 문자열의 내용을 비교하는 경우가 대부분입니다.

따라서 Java에서는 String 비교 시 == 대신 equals()를 사용하는 것이 권장됩니다.
 

'Java' 카테고리의 다른 글

래퍼 클래스  (0) 2026.03.20
Java- 불변객체  (0) 2026.03.11
Object- toString()  (0) 2026.03.03
instanceof  (0) 2026.02.27