>Java >java지도 시간 >언제 Java의 문자열 `intern()` 메소드를 사용해야 합니까?

언제 Java의 문자열 `intern()` 메소드를 사용해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-04 03:26:13152검색

When Should You Use Java's String `intern()` Method?

문자열 리터럴과 인턴 메서드

질문:

Java에서 인턴( ) 문자열에 대한 메서드 리터럴?

답변:

Java는 자동으로 문자열 리터럴을 인턴합니다. 즉, 해당 값이 상수 풀에 저장되고 여러 문자열 개체에서 참조됩니다. 그러나 intern() 메서드는 new 연산자를 사용하여 생성된 문자열로 작업할 때 유용합니다.

설명:

"Rakesh"와 같은 문자열 리터럴은 자동으로 인턴. 즉, new String("Rakesh")에 의해 반환된 문자열 참조는 항상 리터럴 "Rakesh"와 동일한 개체를 가리킵니다.

그러나 new로 생성된 문자열은 인터닝되지 않습니다. String s4 = new String("Rakesh") 코드는 "Rakesh" 값이 이미 상수 풀에 존재하더라도 메모리에 새 객체를 생성합니다. 새로 생성된 문자열을 강제로 인터닝하려면 String s5 = new String("Rakesh").intern()과 같이 intern() 메서드를 사용할 수 있습니다.

따라서 intern() 메서드는 여러 문자열 객체가 상수 풀의 동일한 객체를 참조하는지 수동으로 확인하고 싶을 때 사용해야 합니다. new.

예:

다음 코드를 고려하세요.

String s1 = "Rakesh";
String s2 = "Rakesh";
String s3 = "Rakesh".intern();
String s4 = new String("Rakesh");
String s5 = new String("Rakesh").intern();

if (s1 == s2) {
    System.out.println("s1 and s2 are same"); // 1.
}

if (s1 == s3) {
    System.out.println("s1 and s3 are same"); // 2.
}

if (s1 == s4) {
    System.out.println("s1 and s4 are same"); // 3.
}

if (s1 == s5) {
    System.out.println("s1 and s5 are same"); // 4.
}

출력은 다음과 같습니다.

s1 and s2 are same
s1 and s3 are same
s1 and s5 are same

1, 2, 4행에서는 s1, s2, s3 및 s5는 모두 상수 풀의 동일한 객체를 참조합니다. 3행에서는 s4가 s1과 동일한 값을 가짐에도 불구하고 메모리에서 다른 개체임을 보여줍니다.

위 내용은 언제 Java의 문자열 `intern()` 메소드를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.