문자열 상수 풀: 심층 조사
Java의 문자열 리터럴은 메모리 사용을 최적화하고 성능을 향상시키기 위해 풀링됩니다. 즉, 문자열 리터럴이 발견되면 컴파일러는 문자열 상수 풀에서 동일한 값을 가진 기존 문자열 개체를 확인합니다. 발견되면 참조는 기존 객체로 전달되어 새 객체가 생성되지 않습니다.
그러나 "new" 연산자를 사용하여 새 String 객체를 생성하면 규칙에 어긋나는 것처럼 보이기 때문에 혼란이 발생합니다. 인턴의. 이를 명확히 하기 위해 다음 명령문을 검토해 보겠습니다.
이러한 문은 문자열 리터럴이 풀에 인턴되어 저장되는 동안 "new"를 사용하면 JVM이 새 문자열 개체를 생성하게 됨을 나타냅니다. 즉, 풀에 동등한 문자열이 존재함에도 불구하고 "new" 연산자는 이를 우회하고 풀이 아닌 메모리에 새 객체를 할당합니다.
이를 설명하려면 다음 예를 고려하세요.
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
예상대로 "one"과 "two"의 값은 모두 "test"이지만 "==" 비교는 서로 다른 String 객체를 참조하기 때문에 false를 반환합니다. 이는 문자열 리터럴 "test"가 풀에 이미 존재하더라도 "new"를 사용하면 "one"에 대한 새 문자열 개체가 강제로 생성되기 때문입니다.
요약하면 문자열 상수 풀은 문자열 리터럴을 인터닝하여 메모리 사용량을 계산합니다. 그러나 "new"를 사용하면 풀을 우회하고 풀이 아닌 메모리에 새 String 개체를 만듭니다. 결과적으로 값은 동일하지만 참조가 다른 두 개의 서로 다른 String 객체가 생성됩니다.
위 내용은 문자열 상수 풀: 리터럴이 존재하는 경우에도 \'new\'가 새 문자열 개체를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!