본문 바로가기
언어/Java

String Constant Pool

by 넬준 2022. 3. 25.
String s1 = "hello";
String s2 = new String("hello");
String s3 = new String("hello").intern();

// s1, s2 비교
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true

// s2, s3 비교
System.out.println(s2 == s3); // false
System.out.println(s2.equals(s3)); // true

// s1, s3 비교
System.out.println(s1 == s3); // true
System.out.println(s1.equals(s3)); // true

 

s1처럼 리터럴로 String 객체를 생성하면 내부에서 intern()가 호출되면서,

메모리 Heap영역에 있는 String Constant Pool에 인스턴스가 생성된다.

 

s2처럼 new 키워드로 생성하면 heap메모리 새로운 영역에 인스턴스가 생성된다.

 

s3는 new 키워드로 생성했지만 intern()가 호출되면서 String Constant Pool에 같은 값이 존재하는지 체크하면서 s1과 같은 인스턴스를 참조하게 되었다.

 


참고

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

'언어 > Java' 카테고리의 다른 글

Wrapper Class  (0) 2022.05.10
Class 클래스  (0) 2022.04.01
Overriding 오버라이딩  (0) 2022.03.14
Integer.valueOf() vs Integer.parseInt()  (0) 2022.02.21
자바 기본 - 다형성  (0) 2021.11.29

댓글