소개:
문자열 상수 풀은 Java의 기능입니다. 문자열 리터럴을 포함하여 상수 값을 저장하는 JVM(Java Virtual Machine)입니다. JVM은 컴파일 중에 문자열 리터럴을 발견하면 풀에서 동일한 값을 가진 기존 리터럴을 확인합니다. 발견되면 새 리터럴에 대한 참조가 기존 문자열로 전달되어 새 인스턴스 생성을 방지합니다.
"new" 키워드로 인터닝:
그러나 , 새 String 객체를 생성할 때 "new" 키워드를 사용하면 제공된 참조에 설명된 대로 다른 동작이 발생합니다. 문자열 리터럴(이 경우 "test")에 대한 참조는 여전히 풀에 배치되지만 JVM은 풀의 문자열 개체를 재사용하는 대신 런타임에 새 문자열 개체를 생성해야 합니다.
질문:
풀의 문자열 리터럴에 대한 참조가 "new"로 생성되었을 때와 동일하면 JVM은 새 참조를 생성하는 대신 기존 참조를 반환합니까?
답변:
아니요, JVM은 "new" 연산자를 사용할 때 기존 참조를 반환하지 않습니다. . 대신, 새로운 String 객체를 생성하고 이를 "new" 키워드로 생성된 참조에 할당합니다. 그 이유는 다음과 같습니다.
예:
<code class="java">String literal = "test"; String one = new String(literal); String two = "test"; System.out.println(literal == two); // true (references in pool) System.out.println(one == two); // false (distinct objects)</code>
이 예에서 "리터럴" 및 "2" 참조는 풀의 동일한 String 개체를 가리킵니다. 그러나 "one" 참조는 "new"에 의해 생성된 다른 String 객체를 가리킵니다. 따라서 "=="를 사용한 동등 비교는 false를 반환합니다.
설명:
"컴파일러가 문자열 리터럴을 발견하면 풀에서 문자열 리터럴을 확인합니다. 동일한 문자열이 이미 존재하는 경우"는 "풀에 있음"으로 해석되어야 합니다. 즉, 인턴되었거나 풀에 명시적으로 추가된 문자열 리터럴만 고려된다는 의미입니다. 인턴
위 내용은 상수 풀에 동일한 리터럴에 대한 참조가 존재하는 경우에도 Java가 새 문자열 개체를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!