memostack
article thumbnail
Published 2021. 3. 7. 15:49
Java - String Pool에 대해서 Language/JAVA
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

String Pool

String을 이용하여 문자열을 생성하는 방법은 2가지가 있다.

  • 문자열 리터럴을 이용하여 생성
  • new 연산자를 통해 String 객체를 생성하는 방법

위 2개 방법 모두 Heap 영역에 데이터가 저장되는것은 동일하지만, 리터럴의 경우는 String Pool 이라는 곳에 생성된다.

  • 리터럴 방식으로 문자열을 생성할 때, 만약 String Pool에 같은 문자열이 존재하면 새로 만들지 않고, 만들어진 문자열을 바라본다.
  • 그래서, 아래와 같이 같은 문자열인 경우 동일한 주소를 바라보고 있다.
String greet = "Hello";
String greet2 = "Hello";

System.out.println(System.identityHashCode(greet));
System.out.println(System.identityHashCode(greet2));
System.out.println(greet == greet2);
460141958
460141958
true

 

출처: https://itzone.com.vn/en/article/what-is-string-pool/

반면에, new String으로 만든 경우, String Pool에 생성되지 않고 새로운 객체를 만들기 때문에 같은 문자열이더라도, 다른 주소값을 바라본다.

String greet = new String("Hello");
String greet2 = new String("Hello");

System.out.println(System.identityHashCode(greet));
System.out.println(System.identityHashCode(greet2));
System.out.println(greet == greet2);
460141958
1163157884
false

 

다른 글

2021/03/07 - [Language/JAVA] - Java의 String과 StringBuilder, StringBuffer 비교

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!