본문 바로가기
자바[JAVA]

[자바] String(문자열) 비교 방법 ==, equals()차이

by devlog93 2025. 12. 20.

자바 String(문자열) 비교를 할때 가끔 헷갈리는 경우가 있다. 이참에 정리를 해보려고 한다. 비교는 ==와 equals()메서드를 사용한 비교방법에 대해 알아볼것이다. 음....기본이라? 할수있지만 확실하게 알아보자!

 

1. 문자열 생성 String

String a = "Hello";
String b = "Hello";

System.out.println(a==b); -- 결과는?
System.out.println(a.equals(b)); -- 결과는?

실행결과

true
true

예상한대로 둘다 true가나온다.

 

2. 문자열 생성 new String

String c = new String("hello");
String d = new String("hello");

System.out.println(c == d); -- 결과는?
System.out.println(c.equals(d)); -- 결과는?

실행결과

false
true

첫번째 결과는 false 두번째 결과는 true 
겉보기에는 똑같은 "hello"인데 결과는 다르게 나온다. 왜일까???

이유는 String 객체 생성 방식과 비교 연산의 차이 때문이다.

 

3. ==equals()의 근본적인 차이

== equals()
두 변수가 같은 객체를 참조하는지(주소값비교) 객체의 실제 값(문자열 내용) 비교
즉, 메모리 주소 비교 String 클래스에서 오버라이딩 되어 있음

 

4. String, new String() 

String a = "hello";
String b = "hello";

System.out.println(a == b);      -- true
System.out.println(a.equals(b)); -- true
  • 이방식은 String Pool(문자열 상수 풀) 을 사용한다.

* String Pool 이란...?

  • JVM이 문자열 리터럴을 재사용하기 위해 관리하는 메모리 영역
  • 같은 문자열이 이미 존재하면 새로 만들지 않고 기존 객체를 참조
String c = new String("hello");
String d = new String("hello");

System.out.println(c == d); 	 -- false
System.out.println(c.equals(d)); -- true
  • 이 방식은 무조건 새로운 객체를 생성한다.
  • 그래서 위와 같이 값은 같아도 객체는 다르다.

5. 한눈에 보는 정리표

구분 == equals()
비교대상 메모리 주소 문자열 값
String 리터럴 비교 true 가능 true
new String 비교 false true

문자열을 비교할때는 == 대신에 equals()를 사용하자...! 감사합니다. ( _ _ )