String constant pool
Java에서 문자열 리터럴을 저장하는 독립된 공간
String 객체에 값을 할당하는 방법은 두 가지가 있습니다.
- 리터럴 대입
- new 키워드 사용하여 대입
String str1 = "hello";
String str2 = new String("hello");
String str3 = "hello";
String str4 = new String("hello");
System.out.println(str1==str2); //false
System.out.println(str1==str3); //true
System.out.println(str2==str4); //false
str1, str3은 리터럴을 바로 대입했고 str2, str4는 new 키워드를 사용해 문자열을 대입했습니다.
네 변수 모두 "hello"라는 문자열을 가지고 있지만, 참조하는 메모리 주소를 비교해보니 결과가 다르게 나옵니다.

리터럴로 값을 할당한 경우는 메모리의 heap영역 안의 String constant pool이라는 곳에 문자열이 저장됩니다.
만약 다른 변수에 같은 리터럴값이 또 할당되면 기존에 String constant pool에 저장되어있던 문자열을 참조합니다.
그래서 str1과 str3가 가리키고 있는 주소는 같게 됩니다.
반면 new를 통해 값을 할당한 경우는 메모리의 heap영역에 문자열이 저장됩니다.
new를 사용하면 같은 문자열이 또 할당되더라도 다른 메모리영역에 같은 문자열을 따로 저장하게 됩니다.
str2와 str4는 같은 문자열이 할당되었지만 다른 주소를 가리키고 있습니다.
'Java' 카테고리의 다른 글
| [JAVA] 기본 API 정리 (0) | 2025.10.29 |
|---|---|
| [Spring] 트랜잭션 Transaction /Spring @Transactional 사용법 (0) | 2025.02.03 |
| [JAVA] static 메서드에서 non-static 멤버에 접근 (0) | 2024.12.24 |
| [Java] 예외 처리 (0) | 2024.12.18 |
| [JAVA] Comparable로 객체 정렬하기 (1) | 2024.12.17 |