Java

[JAVA] String Constant Pool

syj0522 2024. 3. 10. 00:03

String constant pool

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영역 중 String constant pool이 아닌 곳에 문자열이 저장됩니다.
new를 사용하면 같은 문자열이 또 할당되더라도 다른 메모리영역에 같은 문자열을 따로 저장하게 됩니다.
str2와 str4는 같은 문자열이 할당되었지만 다른 주소를 가리키고 있습니다.