리터럴 방식 (String = “abcd”)
보통 객체를 생성할 때 new 키워드를 사용해야 하지만, 문자열은 리터럴 방식으로 생성할 수 있습니다. 리터럴 방식은 메모리 효율성을 높이기 위해 자바가 제공하는 최적화 기능입니다. 문자열 리터럴을 방식으로 문자열 객체를 생성하면 JVM의 Heap영역의 ‘문자열 상수 풀’ 영역에 할당됩니다. 일반적인 참조형태의 객체와 달리 만약 같은 문자열이 존재한다면 이미 존재하는 기존에 생성된 객체를 참조합니다. 쉽게 말해 동일한 내용의 문자열이면 같은 객체를 참조합니다.
리터럴 문자열 특징
- 문자열은 String Constant Pool에서 상수취급되어 불변( Immutable )합니다.
- == 비교 시 같은 참조를 가리키므로(동일 객체 취급) true를 반환합니다.
- 동일한 값을 가진 리터럴 방식으로 생성된 문자열이있다면, 해당 객체를 재사용하여 메모리가 절약됩니다.
더보기
💡문자열 상수 풀 (String Constant Pool)
힙 영역에 위치하며, 같은 값을 가진 문자열 리터럴을 중복 저장하지 않고 재사용하는 공간
public class LiteralStringTest {
public static void main(String[] args) {
// 리터럴 방식으로 문자열 생성
String str1 = "hello";
String str2 = "hello";
// == 비교: 참조 비교
System.out.println("str1 == str2: " + (str1 == str2)); // true (같은 객체 참조)
// equals() 비교: 값 비교
System.out.println("str1.equals(str2): " + str1.equals(str2)); // true (같은 값)
}
}
객체 생성 방식 (String = new String(”abcd”))
new 연산자를 사용하여 문자열 객체를 생성하면 객체는 메모리의 Heap영역에 생성됩니다. 리터럴 방식의 같은 문자열이 존재해도, 새로운 객체를 생성합니다.
객체 문자열 특징
- new 키워드로 생성된 객체는 항상 새로운 참조를 가진 객체이므로 == 비교 시 false를 반환합니다.
- 서로 다른 문자열 객체의 내용의 동등성을 equals() 메서드로 확인합니다.
public class ObjectStringTest {
public static void main(String[] args) {
// 객체 방식으로 문자열 생성
String str3 = new String("hello");
String str4 = new String("hello");
// == 비교: 참조 비교
System.out.println("str3 == str4: " + (str3 == str4)); // false (다른 객체 참조)
// equals() 비교: 값 비교
System.out.println("str3.equals(str4): " + str3.equals(str4)); // true (같은 값)
}
}
내용 정리

'CS 스터디 > CS - JAVA' 카테고리의 다른 글
| final, finalize, finally의 차이와 활용 (0) | 2025.04.01 |
|---|---|
| String, StringBuilder, StringBuffer 특징 및 성능비교 (0) | 2025.03.26 |
| 객체 지향 프로그래밍(OOP)의 특징 4가지 (0) | 2025.03.22 |
| Garbage Collection (0) | 2025.03.20 |
| JVM의 구조 (0) | 2025.03.19 |
