> Java > java지도 시간 > Java 문자열 풀은 `new String(\'literal\')`을 어떻게 처리합니까?

Java 문자열 풀은 `new String(\'literal\')`을 어떻게 처리합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-03 12:11:29
원래의
885명이 탐색했습니다.

How Does the Java String Pool Handle `new String(

문자열 상수 풀: 오해 명확화

Java에서는 "abc"와 같은 "문자열 리터럴"이 삽입됩니다. 이는 동일한 리터럴 값에 대한 여러 참조가 동일한 값을 가리킨다는 의미입니다. 인스턴스를 메모리에 저장합니다. 이는 메모리 사용량과 성능을 최적화하는 데 도움이 됩니다. 그러나 new String("abc")과 같은 문자열 리터럴과 함께 new를 사용하면 리터럴이 문자열 풀에 이미 존재하더라도 새 문자열 개체가 생성됩니다.

문자열 풀에 관한 두 가지 설명이 제기되었습니다. 약간의 혼란:

  • 문 1: "컴파일러는 문자열 리터럴을 발견하면 풀을 검사하여 동일한 문자열이 이미 존재하는지 확인합니다."
  • 문 2: "문자열 리터럴과 함께 new를 사용하면 리터럴에 대한 참조는 여전히 상수 테이블(문자열 리터럴 풀)에 저장되지만 JVM은 런타임에 새 String 객체를 생성합니다. "

명확히 설명하자면, 명령문 2에서는 new를 사용하여 개체를 생성할 때에도 문자열 리터럴이 여전히 문자열 풀에 억류되어 있지만 이에 관계없이 새 개체가 생성된다는 점을 암시합니다.

예:

String one = new String("test");
String two = "test";
로그인 후 복사

인턴으로 인해 new String("test")에 전달된 참조가 2개와 동일합니다. 그러나 값이 "test"인 새 String 객체가 생성되어 하나에 할당됩니다.

따라서 값이 "test"인 별도의 String 객체가 두 개 있습니다. 하나는 상수 풀에 있습니다(두 개가 참조함). 그리고 new로 생성된 새로운 것(하나에 의해 참조됨). 그렇기 때문에 one.equals(two)는 true(같은 값을 가짐)이지만 one == two는 false(다른 객체를 참조함)입니다.

문 1은 "컴파일러가 다음을 발견할 때"로 바꿔야 합니다. 문자열 리터럴을 사용하면 동일한 문자열이 _풀에_ 이미 존재하는지 확인합니다." 문자열은 명시적으로 인턴되거나 클래스 정의에서 리터럴로 사용되는 경우에만 인턴됩니다.

위 내용은 Java 문자열 풀은 `new String(\'literal\')`을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿