개념

String 문자열이 존재하는 영역(JVM 힙 메모리에 존재)으로 동일한 문자열 리터럴을 재사용하여 메모리 사용을 최적화하는 역할을 하며 tring Pool을 이해하려면 문자열이 어떻게 메모리에 할당되는지를 알아야 함

Untitled

문자열 리터럴

문자열 리터럴로 생성한 객체는 String Pool의 메모리 주소를 갖게 되며 같은 문자열 리터럴 객체가 생성될 경우같은 값의 주소를 가리키게 되므로 하나의 메모리를 재사용 할 수 있음

String value1 = "value";
String value2 = "value";
  1. 문자열 리터럴 "value"는 JVM의 String Pool에 저장됨
  2. 두 번째 리터럴도 동일한 "value"를 사용하므로, String Pool에 이미 존재하는 문자열을 재사용함
  3. 같은 리터럴을 사용하는 두 문자열은 동일한 메모리 주소를 참조하여 value1 == value2는 true를 반환함

new 연산자를 사용한 문자열

일반적인 new 연산자를 통해 객체를 생성하는 방식이므로 String Pool의 해당 값이 있더라도 Heap 영역 내 별도의 메모리를 할당하여 주소를 가리킴

String value1 = new String("value");
  1. new String("value")는 새로운 String 객체를 힙 메모리에 생성
  2. 이 경우, 문자열 리터럴 "value"는 String Pool에 있지만, new 키워드를 사용하여 새로 생성된 String 객체는 힙 메모리에 별도로 저장됨
  3. 서로 다른 메모리 주소를 참조하게 되며 value1 == value2는 false를 반환
  4. 문자열의 내용을 비교하는 equls()를 사용하면 value1.equals(value2)는 true를 반환하게 됨

intern() 메서드