2011-08-22 6 views
4

문자열 풀에서 내 개념이 명확한 지 여부는 의심 스럽습니다. 다음 코드 세트를 공부하고 내 대답이 문장의 다음 세트 이후에 생성 된 객체의 수에 올바른지 확인하십시오 -Java 문자열 풀 객체 생성

1)

String s1 = "abc"; 
String s2 = "def"; 
s2 + "xyz"; 

2)

String s1 = "abc"; 
String s2 = "def"; 
s2 = s2 + "xyz"; 

3)

String s1 = "abc"; 
String s2 = "def"; 
String s3 = s2 + "xyz"; 

4)

String s1 = "abc"; 
String s2 = "def"; 
s2 + "xyz"; 
String s3 = "defxyz"; 

개념적으로 알고 있듯이 위의 4 가지 경우 모두 각 줄 집합을 실행 한 후에 4 개의 개체가 만들어집니다.

+0

왜 우리에게 4 가지의 이유가있는 이유 3을 말해주십시오. – djna

+0

처음 세 개에는 각각 3 개의 문자열 개체 만 있습니다 ... –

+0

@ djna : True. 컴파일러는 s2 + "xyz"가 컴파일 타임에 평가 될 수 있기 때문에 세 개의 객체 만 자유롭게 사용할 수 있습니다. – Thilo

답변

7

s2 + "xyz"과 같은 표현식은 사용할 수 없습니다. 컴파일러에서 상수 만 평가되며 문자열 상수 만 자동으로 문자열 리터럴 풀에 추가됩니다.

final String s1 = "abc"; // string literal 
String s2 = "abc"; // same string literal 

String s3 = s1 + "xyz"; // constants evaluated by the compiler 
         // and turned into "abcxyz" 

String s4 = s2 + "xyz"; // s2 is not a constant and this will 
         // be evaluated at runtime. not in the literal pool. 
assert s1 == s2; 
assert s3 != s4; // different strings. 
1

왜 신경 씁니까? 이 중 일부는 컴파일러가 얼마나 적극적으로 최적화하여 실제 정답이 없는지에 달려 있습니다.