Java에서 "new String(...)" 사용
코드 구조 "new String(...)을 만날 때 )" Java에서는 그 목적과 효과를 이해하는 것이 중요합니다. 간단한 문자열 할당(예: "s = "Hello World";")과 달리 이 구문은 "new" 연산자를 활용하여 문자열 상수로 초기화하여 String 객체를 생성합니다.
목적 "new String(...)"
문자열 상수는 상수 풀에 있지만 "new String(...)"의 동작은 다음과 같지 않습니다. 짐작할 수 있듯이 간단합니다. 새로운 String 객체를 생성하는 동안 반드시 힙에 새 메모리가 할당되는 것은 아닙니다.
강제 복사에 대한 주의 사항
일반적인 오해 중 하나는 다음과 같습니다. "new String(...)"은 내부 문자 배열의 고유한 복사본을 강제합니다. 그러나 이 동작은 구현에 따라 다르며 문서화되지 않았습니다. 예를 들어 "small=new String(huge.substring(10,20))"을 통해 이를 달성하려고 시도하면 전체 원래 문자 배열이 유지되어 상당한 메모리를 소비할 수 있으므로 예상치 못한 결과가 발생할 수 있습니다.
고유 복사본을 위한 솔루션
문자 배열의 고유한 복사본을 보장하려면 "new"를 사용해야 합니다. 문자열(huge.substring(10,20).toCharArray())." 이를 위해서는 두 배의 메모리 복사가 필요하지만("toCharArray()"에 한 번, String 생성자에 한 번) 원하는 결과를 얻기 위한 구현 독립적인 방법입니다.
문서화 가정의 함정
문서의 명확성이나 정확성이 부족할 수 있다는 점을 기억하는 것이 중요합니다. "new String(...)"에 대한 문서에서는 지원 문자 배열의 복사본도 암시하는 "문자열"의 복사본을 생성한다고 제안합니다. 그러나 Apache Harmony 구현에서 볼 수 있듯이 항상 그런 것은 아닙니다.
결론
"new String(...)"의 뉘앙스 이해 Java는 잠재적인 함정을 피하는 데 필수적입니다. 항상 의도한 동작이 발생하는 것은 아니지만 일부 시나리오에서는 특정 목적을 수행합니다. 그러나 이 구문의 구현에 따른 특성을 알고 주의해서 진행하는 것이 좋습니다.
위 내용은 Java에서 `new String(...)`을 언제, 왜 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!