준호씨의 블로그

Java - String 퀴즈. new String, constant pool 관련 본문

개발이야기

Java - String 퀴즈. new String, constant pool 관련

준호씨 2021. 3. 2. 23:54
반응형

1. aa == bb 결과는 무엇일까요?

String aa = new String("aaa");
String bb = new String("aaa");
System.out.println(aa == bb);

 

2. a == b 결과는 무엇일까요?

String a = "aaa";
String b = "aaa";
System.out.println(a == b);

 

3. "aaa" == "aa" + "a"의 결과는 무엇일까요?

System.out.println("aaa" == "aa" + "a");

 

1번의 답은 false입니다. String 객체끼리 비교하기 때문에 생성된 두 객체 aa와 bb는 서로 다른 객체이기 때문입니다. 그래서 문자열의 내용이 같은지 비교하려면 aa.equals(bb)로 비교하면 true가 나옵니다. 또는 aa.intern() == bb.intern()으로 비교해도 true가 나옵니다. "aaa"리터럴 방식으로 문자열을 생성하면 문자열 상수 풀(String constant pool)이라는 곳에 저장이 되는데 같은 문자열은 같은 상수 풀을 참조하게 됩니다. intern() 메서드를 이용하면 문자열 상수 풀에 접근하게 됩니다.

1번 해설을 이해했다면 2번도 이해되었을 것입니다. 같은 문자열은 문자열 상수 풀에 한 번만 저장되기 때문에 리터럴로 생성한 a와 b는 서로 같습니다. a == b는 true가 됩니다.

3번의 답은 true입니다. 컴파일러 최적화로 인해 컴파일 결과가 true가 됩니다. 자세한 건 까 봐야 알겠지만 "aa" + "a"가 "aaa"로 최적화된 다음 "aaa" == "aaa"를 한번 더 최적화해서 true로 만들 것으로 예상됩니다.

반응형
Comments