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
'☕️자바 𝗝𝗔𝗩𝗔' 카테고리의 다른 글
자바 JVM, JDE, JDK (JDK와 JRE의 차이점) (0) | 2022.05.30 |
---|---|
[Java] 자바 문자열 비교 == equals() 차이점 (0) | 2022.05.19 |
Call by value, Call by reference 차이 (자바에서의 Call by value, Call by reference) (0) | 2022.05.19 |
[자료구조] 자바 Queue add, offer 메소드 차이 (0) | 2022.05.17 |
Java 클래스 메소드, 인스턴스 메소드 (0) | 2022.05.16 |
댓글