☕️자바 𝗝𝗔𝗩𝗔

[Java] 자바 String Pool과 new String (Java의 String은 어디에 저장되는가)

비타민찌 2022. 5. 19. 14:39
728x90

String Interning Java에서의 String은

일반적인 Heap에 저장할 수도 있고, 별도의 String constants Pool이라는 공간을 제공하고 있다.

이 String Constants Pool에 저장하고 사용하는 것을 String Interning 이라고 하는데

String Interning에 저장된 String 값은 불변성(Immutability)을 가지게 된다.

불변성을 가진다는 의미는 값은 변함이 없으며 동일한 String 값을 가지고 있다면 같은곳을 가리킨다는 의미다.

(동일한 값이라면 동일한 참조)

 

String Interning은 아래의 흐름으로 값을 찾는다.

1. String의 값이 String Constants Pool에 있는지 찾음
2. 있다면 바로 반환
3. 없다면 StringConstants Pool에 해당 값을 할당
4. 반환

흐름을 보면, String Pool을 이용하기 때문에

같은 값에 대해서는 새로운 메모리에 할당 없이 재사용 가능하다는 장점을 가지고 있다는 것을 알 수 있다.

 

아래 코드로 간단히 테스트 해보자.

String literalStr1 = "apple";
String literalStr2 = "apple";
System.out.println("result = " + literalStr1 == literalStr2);

결과로 result = true가 나온다.

 

하지만, String Object로 객체의 형태로 String을 생성한다면

각 객체는 다른 메모리를 가리키기 때문에 동일한 값이 나오지 않는다.

 

 

 

참고:

https://www.baeldung.com/java-string-pool

이어 보기 좋은 글 :

https://starkying.tistory.com/entry/why-java-string-is-immutable

https://barbera.tistory.com/44 , https://blog.ggaman.com/918

728x90