2014-08-28 1 views
3

나는 자바가 새로운데, 친구가 물어 본이 질문의 논리를 알고 싶다.나를 혼란스럽게하는 간단한 문자열 쿼리

말 문자열 풀은 비어 있고

프로그래머 그것 때문에 생성됩니다 얼마나 많은 개체

String str = new String("Raj"); 

을 실행합니다.

내 친구는 3 개의 개체가 생성되지만 그 뒤에있는 논리를 알 수 없다고 말합니다.

누군가가 어떻게 3 개의 물체가 만들어 지는지 안내 해줄 수 있습니까?

+0

기본적으로 친구가 잘못되었습니다. 그러나 가까이에. – DonyorM

+0

친구가'String str = new String ("Raj");과'String str = "Raj";'에 대해 경고했다면, 그들은 맞았습니다. – jdphenix

답변

5

문자열 개체가 두 개 있는데 하나는 문자열 리터럴 "Raj"이고 다른 하나는 new String(...)에 의해 생성 된 중간 문자열 개체입니다.

문자열 리터럴의 내부에 char[] 인 다른 (세 번째) 객체가 있다고 주장 할 수 있습니다.이 객체는 개수를 지정할 수도 있지만 String 객체는 아닙니다. 를 포함하므로 @jdphenix 지적 생성 된 각각의 객체가 Object의 서브 및 (새 문자열 동일한 char[] 사용하고 새로 만들 않음)


편집 그것의 인스턴스 (Object로 캐스팅하고 그대로 사용할 수 있습니다). 따라서 기술적으로 실제로 여기에 생성 된 객체는 3 개 이상입니다. 그러나 그 중 2 개만 String 객체입니다.

+0

만약 우리가 정말로 페티 틱을 원한다면, 두 개의'String'과'char []'배열의'Object' 수퍼 클래스 인스턴스를 잊지 마십시오. – jdphenix

+0

@jdphenix 그것은 같은 대상입니다. 동일한 경우입니다. – amit

+0

그런 다음 ** StringBuilder **가 문자열 풀에서 만들어 질 것이라고 생각하십니까? – Devavrata

2

실제로 두 개의 개체가 생성됩니다.

"Raj" 

new String("Raj"); 

당신의 친구는 은 당신을 따라 모인 ... 중 올바르지 않거나입니다.

죄송합니다.

편집는 :로서 올바르게 String의 내부에 char[] 목적으로하는 제 3 목적을 만든 지적.
하지만 단 하나의 String를 구금해야하며 String의 내부 풀 (리터럴 문자열)에 투입됩니다

+0

2 개의 String 객체가 있지만 String 내부에'char []'도 있습니다. – amit

1

2 객체 (new String("Raj") 문자열 리터럴 "Raj"String 객체)가 생성됩니다.

0

먼저 코드가 실행될 때 풀이 이미 채워져 있으므로 "문자열 풀이 비어있을 것"이라는 가정이 적용되지 않습니다.

하나의 문자열 개체가 문자열 상수 "Raj"에 대한 풀에 있습니다.
하나의 문자열 객체가 생성됩니다.

이것은 모두 2 개의 객체이며, 그 코드가 흥분하여 결과적으로 1 개의 객체 만 생성됩니다.

1

이제 혼란 스럽네요. 아시다시피 .. intern()은 String 풀에서 문자열 리터럴을 만드는 방법입니다. 이 경우

String str = new String ("Raj");

str.intern(); // Raj를 문자열 풀에 넣을 것이다. 또는 내 이해가 wrong.Each 때마다 String 개체를 이미 문자열이 리터럴 문자열 풀에서 만들어집니다 만들지 않습니다.