String Pool (String constrant pool)이란 Java Heap Memory에 있는 스트링 저장소다.
위에 사진을 보면 잘 이해할 수 있다. 쌍따옴표로 만들어진 s1, s2는 컴파일할때 .class 파일의 String Pool에 들어가게 된다. 이와 달리 생성자로 만들어진 s3는 여느 객체와 마찬가지로 힙메모리에 저장된다.
같은 문자열인데 굳이 다른 객체를 생성할 필요가 있나.. 하나의 객체를 사용할 수 없을까~? -> intern()
intern()메소드는 String객체를 상수화시킨다.
String s1 = "Cat";
String s2 = new String("Cat").intern();
System.out.println(s1.hashCode()); //67510
System.out.println(s2.hashCode()); //67510
해시코드 값이 같다.
이렇게해서 힙 메모리를 아낄 수 있는 반면, 비용이 많이 든다.
intern() 메소드의 작동 원리는 다음과 같다.
1. String Pool에서 equal()을 통하여 객체의 내용이 같은 것이 있다면 반환한다.
2. 없으면 String Pool에 객체를 추가하고 추가한 객체를 반환한다.
공부하다가 내용 추가할 예정
이미지 출처 : http://www.journaldev.com/797/what-is-java-string-pool