Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 String 클래스의 intern() 메서드를 언제 사용할 수 있습니까?


intern() 메소드 문자열 클래스문자열 중복 문제를 처리하는 데 사용할 수 있습니다. 자바에서. 인턴() 사용 중복 문자열 인스턴스가 소비하는 많은 메모리를 절약할 수 있습니다. . 문자열에 다른 문자열과 동일한 내용이 포함되어 있지만 다른 메모리 위치를 차지할 수 있는 경우 문자열이 중복됩니다.

우리는 JVM이 별도의 힙 메모리를 유지한다는 것을 알고 있습니다. 성능을 위한 문자열 리터럴의 경우. 문자열 리터럴을 선언하면 이 로 이동합니다. 다른 변수에 동일한 리터럴 값이 할당되면 새 개체를 만드는 대신 풀에서 선택됩니다. 에 저장 . 그러나 문자열이 new 생성자를 사용하여 선언된 경우 r, 리터럴이 풀에 존재하더라도 새 객체가 만들어집니다. 이것을 피하고 JVM이 풀에서 리터럴을 선택하도록 하려면 intern()을 사용합니다. 방법.

Java는 기본적으로 모든 문자열을 자동으로 인턴합니다. 인턴() 메소드는 n이 있는 문자열에서 사용할 수 있습니다. ew 문자열() ==연산자로 비교하기 위해.

public class StringInternClassTest {
   public static void main(String[] args) {
      String s1 = "Tutorix";
      String s2 = "Tutorix";
      String s3 = new String("Tutorix");
      final String s4 = s3.intern();
      String s5 = "?Tutorix".substring(1);
      String s6 = s5.intern();
      System.out.println(s1 == s2);
      System.out.println(s2 == s3);
      System.out.println(s3 == s4);
      System.out.println(s1 == s3);
      System.out.println(s1 == s4);
      System.out.println(s1 == s5);
      System.out.println(s1 == s6);
      System.out.println(s1.equals(s2));
      System.out.println(s2.equals(s3));
      System.out.println(s3.equals(s4));
      System.out.println(s1.equals(s4));
      System.out.println(s1.equals(s3));
   }
}

출력

true
false
false
false
true
false
true
true
true
true
true
true