Java의 문자열 객체에 대한 문자열 상수 할당: "new String(...)" 이해
코드 샘플을 검사하는 동안 다음과 같은 작업을 수행할 수 있습니다. "new" 연산자를 사용하여 String 객체에 String 상수를 할당한 경우가 있습니다. 이 구문은 특히 상수 풀에 있는 일반적인 문자열 상수 저장을 고려할 때 그 목적과 효과에 대한 의문을 제기합니다.
"new String(...)"의 목적
"new String(...)"의 주요 목적은 지정된 문자열 리터럴의 복사본을 포함하는 새 String 개체를 만드는 것입니다. 상수 풀에 저장된 기존 문자열 리터럴을 참조하는 "s = "Hello World";"와 달리 "s = new String("Hello World");" 자체 문자 배열 백업 저장소를 사용하여 힙에 새 객체를 생성합니다.
힙에 할당
예, "new String(... )", 문자열 값을 저장하기 위해 새 개체가 힙에 할당됩니다. 이는 상수 풀에서 기존 문자열 리터럴을 참조하는 것과 대조됩니다.
사용 사례 및 구현 종속성
특정 시나리오에서는 별도의 복사본을 강제로 생성해야 할 수도 있습니다. "new String(...)"을 사용하여 내부 문자 배열을 만듭니다. 예:
그러나 이 동작은 문서화되지 않았으며 구현에 따라 다릅니다. 다양한 JVM(Java Virtual Machine)이 이 표현식을 다르게 처리할 수 있습니다.
함정 및 제한 사항
Apache Harmony에서 String(String)의 이전 구현은 실제로 기본 문자 배열의 복사본입니다. 이로 인해 더 이상 필요하지 않은 경우에도 큰 문자 배열에 대한 참조를 유지하는 등 잠재적인 메모리 문제가 발생할 수 있습니다.
별도의 문자 복사본을 사용하여 새 String 객체를 생성하려면 다음이 필요합니다. 사용:
이 접근 방식은 문자의 고유한 복사본을 보장하지만 두 개의 배열 복사본이 필요합니다. 비효율적입니다.
결론
"new String(...)" 표현식은 지정된 문자열 리터럴의 복사본을 포함하는 힙에 새 String 객체를 생성합니다. 특정 시나리오에서는 유용할 수 있지만 예상치 못한 동작을 방지하려면 잠재적인 함정과 구현 종속성을 인식하는 것이 중요합니다.
위 내용은 언제, 왜 Java에서 `new String(...)`을 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!