자바 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()를 사용하자...! 감사합니다. ( _ _ )
'자바[JAVA]' 카테고리의 다른 글
| [자바] String + int 연산 완벽 정리 (문자형 정수형 더하기) (0) | 2025.12.18 |
|---|---|
| [자바] int를 String으로, String을 int로 변환하는 방법 정리 (0) | 2025.12.17 |