Language/Java

Java String Pool

JUNGKEUNG 2021. 11. 20. 14:56
반응형

String


String을 만드는데 2가지 방법이 있다. 

String a = "aa";
String b = "aa";
String c = new String("aa");
String d = new STring("aa");
  • 첫번째 방법으로는 가장 많이 알고있는 String 변수를 만들어서 사용하는것이다.
  • 두번째 방법으로는 new 연산자를 사용하여 만드는 방법이다.
  • String은 불변성(Immutable)이라는 성질을 가지고 있으며 같은 값의 문자열에 대해서는 단 하나의 문자열 객체만을 생성하도록 설계 되어있다.
  • String은 Heap 메모리에 저장된다.

 

 

 

Java String Pool


  • new 연산자로 String 객체를 생성하지 않는 것이 좋다라는 말을 볼 수 있다.
  • Heap 영역 내 "String Constant Pool"에 저장되어 재사용되지만, new연산자로 생성하면 같은 내용이라도 여러 개의 객체가 각각 Heap영역을 차지하기 때문이다.

출처 : https://dololak.tistory.com/718

  • 위와 그림과 같이 new 연산자의 String은 StringPool이 아닌 Heap 메모리에 생성이 되는걸 확인 할수가 있다
  • 아래에 코드로 테스트를 해보았다. 결과는 다음과 같다.
public class StringPool {
    public static void main(String[] args) {
        String a = "a";
        String b = "a";
        String c = new String("a");
        String d = new String("a");

        System.out.println ("=================");
        System.out.println (a==b); //true
        System.out.println (c==d); //false
        System.out.println (a==c); //false
        System.out.println (b==d); //false
        System.out.println ("=================");
        System.out.println (a.equals ( c )); //true
        System.out.println (b.equals ( d )); //true
        System.out.println (a.equals ( b )); //true
        System.out.println (c.equals ( d )); //true

    }
}

 

 

 

결론


  • java에서 String은 Heap 영역에 String Pool이라는 영역을 따로 두어 그곳에 저장한다.
  • new연산자를 이용한 String은 String Pool에 저장이 안하며, Heap영역에 저장이 된다.
  • new연산자를 이용한 String은 각각 다른 객체를 생성하는걸 알수가 있다.

 

 

 

참고 자료


https://dololak.tistory.com/718

https://starkying.tistory.com/entry/what-is-java-string-pool

'Language > Java' 카테고리의 다른 글

카카오 페이( Kakao pay) 기능구현  (2) 2022.04.23
생성자  (0) 2021.11.27
[주말 스터디]toString과 valueOf 차이  (0) 2021.11.06
직렬화 역직렬화  (0) 2021.11.01
List, Set, Map  (0) 2021.10.10