티스토리 뷰

공부자료

[자바] String.intern()

임다솜 임다솜 2016.10.27 10:56

지난 포스트에서 String의 생성자에 관해 공부하다보니

흥미로운 것들이 많이 발견되어 String에 관한 포스트를 또 쓰고자 합니다.

String은 자주 쓰는 클래스임에도 불구하고 모르는 사실들이 굉장히 많은 것 같아요.

그럼 제가 발견한 흥미로운 사실을 적어 볼게요!


String.intern()

String str = "Hello World!" 라는 선언을 했을 때 큰 따옴표로 초기화를 하면 String 생성자 중 어떤 생성자가 호출되는지 궁금해서 찾다가 intern()이라는 메서드를 알게 되었습니다.

다음 글을 보시면 "String interning"에 대한 이야기를 하고 있습니다.

String interning은 JVM이 같은 문자열을 가지는 객체는 오직 하나만 생성하도록 구현하는 것이라고 합니다.

intern()을 잘 사용하면 불필요하게 같은 문자열 객체가 생성되는 일이 없어지겠네요.


http://www.programcreek.com/2014/03/create-java-string-by-double-quotes-vs-by-constructor/ > 직접 보러가기!



자바 도큐먼트에서 intern()을 확인해보면 다음과 같습니다. 대략 equals(Object)로 비교를 해서 이미 존재하는 문자열의 생성이 요구되면 Pool에서 그 문자열의 참조값을 가져온다는 내용 같습니다.

intern을 사용할 때와 사용하지 않을 때의 차이를 확인해보았습니다.

code1

public class Test20161027 {

public static void main(String[] args){

String str1 = "Hello World!";

String str2 = new String("Hello World!");
System.out.println((str1 == str2));

String str3 = new String("Hello World!").intern();
System.out.println((str1 == str3));
}
}


code1 : Output

false
true



intern을 사용하지 않고 문자열을 생성한 경우에는 false라는 결과를, intern을 사용하여 문자열을 생서한 경우에는 true라는 결과를 가져오는 것을 확인할 수 있었습니다!

같은 문자열이라도 new를 사용해서 생성하면 새로운 문자열 객체를 만들지만, intern메서드를 사용하여 같은 문자열 객체를 참조할 수 있는 것을 확인할 수 있네요.

이걸 어떻게 사용하느냐의 문제인데, 앞으로 문자열을 다룰 때 조금이나마 신경을 쓸 수 있을 것 같습니다!





댓글
댓글쓰기 폼
공지사항
Total
37,833
Today
31
Yesterday
37
링크
TAG
more
«   2018/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함