2014-06-15 5 views
3

나는 인증 도서를 읽으며 여기 나는 혼란스러운 문제에 직면 해있다. 이 코드는 하나의 String 객체 만 생성하지만 2 개의 객체가 생성된다고합니다. 내가 맞습니까?생성 된 문자열 개체 수

String summer = new String("Summer"); 

상수 "Summer"가 생성되어 String constant pool에 배치되지 않습니까?

편집 : 얘들 아 나는 혼란스러워. 정확한 대답이 필요해. 다음은 서로 다른 게시물이 모두 1 개체 인 것입니다. & 2 개체가 생성 중입니다.

+0

네,하지만 문자열 상수 풀이므로 이미 존재하기 때문에'new String()'은 다시 생성하지 않습니다. 동일한 참조 번호가 사용됩니다. –

+0

@TillHelge "Summer"== new String ("Summer")는 항상 false를 반환하기 때문에 동일한 참조를 사용하지 않을 것이라고 생각합니다. 아니면 내가 귀하의 게시물을 오해하셨습니까? –

+0

문자열을 비교하는 @ArsenAlexanyan : ""Summer ".equals (new String ("Summer "))'; – vikingmaster

답변

6

생성은 혼동을 일으킬 수 있습니다. 사실, 당신은 맞다 : 두 개의 문자열 인스턴스는 라인

String summer = new String("Summer"); 

에 참여하고 관여 두 개의 문자열 인스턴스가, 그들은이 somwhere 언젠가 작성해야합니다.

작성 시간은 큰 차이가 있습니다. "Summer"은이 상수가 들어있는 클래스를로드 할 때 내부 문자열 풀에로드되는 상수입니다. 따라서이 문자열 인스턴스가 클래스를로드하는 동안 생성됩니다.

이 줄이 포함 된 코드를 실행하는 동안 변수 summer이 참조하는 문자열 개체가 만들어집니다. 그게 전부 야.

+0

와우 흥미로운 대답 몇 가지 제안을 한 후에 이것을 선택하겠습니다. 고맙습니다! –

1
String summer = new String("Summer"); 

이렇게하면 String 인스턴스가 하나만 만들어집니다. intern()을 호출하기 전에는 String 풀에 포함되지 않습니다.

+0

인스턴스가 새 String (...)입니다. 그러나 "여름"은 어떨까요? 그것은 만들어지지 않았습니까? –

+1

아니야. 그리고 계속해서 String literal을 언급하기를 바랍니다. –

+0

예 String literal을 사용하고 있습니다. 감사! –