나는 자바가 새로운데, 친구가 물어 본이 질문의 논리를 알고 싶다.나를 혼란스럽게하는 간단한 문자열 쿼리
말 문자열 풀은 비어 있고
프로그래머 그것 때문에 생성됩니다 얼마나 많은 개체
String str = new String("Raj");
을 실행합니다.
내 친구는 3 개의 개체가 생성되지만 그 뒤에있는 논리를 알 수 없다고 말합니다.
누군가가 어떻게 3 개의 물체가 만들어 지는지 안내 해줄 수 있습니까?
나는 자바가 새로운데, 친구가 물어 본이 질문의 논리를 알고 싶다.나를 혼란스럽게하는 간단한 문자열 쿼리
말 문자열 풀은 비어 있고
프로그래머 그것 때문에 생성됩니다 얼마나 많은 개체
String str = new String("Raj");
을 실행합니다.
내 친구는 3 개의 개체가 생성되지만 그 뒤에있는 논리를 알 수 없다고 말합니다.
누군가가 어떻게 3 개의 물체가 만들어 지는지 안내 해줄 수 있습니까?
문자열 개체가 두 개 있는데 하나는 문자열 리터럴 "Raj"이고 다른 하나는 new String(...)
에 의해 생성 된 중간 문자열 개체입니다.
문자열 리터럴의 내부에 char[]
인 다른 (세 번째) 객체가 있다고 주장 할 수 있습니다.이 객체는 개수를 지정할 수도 있지만 String 객체는 아닙니다. 를 포함하므로 @jdphenix 지적 생성 된 각각의 객체가 Object
의 서브 및 (새 문자열 동일한 char[]
사용하고 새로 만들 않음)
편집 그것의 인스턴스 (Object로 캐스팅하고 그대로 사용할 수 있습니다). 따라서 기술적으로 실제로 여기에 생성 된 객체는 3 개 이상입니다. 그러나 그 중 2 개만 String 객체입니다.
실제로 두 개의 개체가 생성됩니다.
"Raj"
및
new String("Raj");
당신의 친구는 은 당신을 따라 모인 ... 중 올바르지 않거나입니다.
죄송합니다.
편집는 :로서 올바르게 String
의 내부에 char[]
목적으로하는 제 3 목적을 만든 지적.
하지만 단 하나의 String
가 가를 구금해야하며 String
의 내부 풀 (리터럴 문자열)에 투입됩니다
2 개의 String 객체가 있지만 String 내부에'char []'도 있습니다. – amit
2 객체 (new String("Raj")
문자열 리터럴 "Raj"
과 String
객체)가 생성됩니다.
먼저 코드가 실행될 때 풀이 이미 채워져 있으므로 "문자열 풀이 비어있을 것"이라는 가정이 적용되지 않습니다.
하나의 문자열 개체가 문자열 상수 "Raj"에 대한 풀에 있습니다.
하나의 문자열 객체가 생성됩니다.
이것은 모두 2 개의 객체이며, 그 코드가 흥분하여 결과적으로 1 개의 객체 만 생성됩니다.
이제 혼란 스럽네요. 아시다시피 .. intern()은 String 풀에서 문자열 리터럴을 만드는 방법입니다. 이 경우
String str = new String ("Raj");
str.intern(); // Raj를 문자열 풀에 넣을 것이다. 또는 내 이해가 wrong.Each 때마다 String 개체를 이미 문자열이 리터럴 문자열 풀에서 만들어집니다 만들지 않습니다.
기본적으로 친구가 잘못되었습니다. 그러나 가까이에. – DonyorM
친구가'String str = new String ("Raj");과'String str = "Raj";'에 대해 경고했다면, 그들은 맞았습니다. – jdphenix