아니요, 매번 다른 문자열을 생성하지 않습니다. 문자열 상수는 입니다. - 실제로 상수 "NotSubscribed"는 코드 전체에서 동일한 문자열 개체를 참조하며이 메서드가 실행될 때마다가 아닙니다.
section 3.10.5 of the Java Language Specification 가입일
:
각 문자 스트링은 클래스 문자열 (§4.3.3)의 인스턴스에 대한 참조 (§4.3) (§4.3.1, §12.5)이다. String 객체는 상수 값을가집니다. 상수 표현식 (§15.28)의 값인 문자열 리터럴 또는 더 일반적으로 문자열은 String.intern 메서드를 사용하여 고유 한 인스턴스를 공유 할 수 있도록 "격리"됩니다.
그러나 귀하의 편집에 :
는 는
는
내가하지 않고 단지 문자열이 생성되는 경우,이 문자열 풀에 저장되어 있음을 기억하고 그 후에는 항상 풀에서 검색 다시는 만들어 . 내가 맞습니까?
아니요, 맞지 않습니다. 문자열 상수 인 만 기본적으로 인계됩니다. 예를 들어, 다음 코드를 실행할 때마다 :
public List<String> createStrings() {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add("foo" + i);
}
return list;
}
... 그러면 다른 10 개의 문자열이 생성됩니다.
모든 문자열이 "문자열 풀"에 저장되는 것은 아니지만 프로그램의 리터럴은 (Skeet이 설명한 것처럼). 그래서 당신의 함수는 새로운 String을 만들지 않습니다. –