블로그를 이전하였습니다. 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
반면에, 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 비교
반응형
'Language > JAVA' 카테고리의 다른 글
Java - HashMap과 Hashtable의 차이 (0) | 2021.03.08 |
---|---|
Java - equals()와 hashCode()의 관계 (0) | 2021.03.07 |
Java의 String과 StringBuilder, StringBuffer 비교 (0) | 2021.03.07 |
JVM GC 동작 순서와 GC 종류(Serial / Parallel / CMS / G1 GC ) (0) | 2021.03.07 |
JVM GC(Garbage Collector) 구조 (0) | 2021.03.07 |