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

Java에서 String intern() 메소드의 역할은 무엇입니까?

<시간/>

String은 일련의 문자를 저장하는 Java의 클래스이며 java.lang에 속합니다. 패키지. String 객체를 생성하면 수정할 수 없습니다(불변).

저장소

모든 String 객체는 String 상수 풀이라고 하는 힙 영역의 별도 메모리 위치에 저장됩니다. .

문자열 값을 정의할 때마다 JVM은 문자열 상수 풀에 주어진 값으로 문자열 객체를 생성합니다. 따라서 위의 프로그램을 실행하면 String 상수 풀에 두 개의 String 값이 생성됩니다.

Java에서 String intern() 메소드의 역할은 무엇입니까?

인턴() 메소드

이 메서드는 고유한 문자열 값 풀에서 현재 문자열의 값을 반환합니다. 특정 String에서 이 메서드를 호출할 때마다 String 상수 풀에 이미 동일한 String이 포함되어 있으면(Object 클래스의 equals 메서드에 따라) 반환됩니다. 그렇지 않은 경우 현재 문자열이 참조를 반환하는 문자열 상수 풀에 추가됩니다.

즉, 동일한 내용을 가진 두 개의 문자열에서 이 메서드를 호출하면 동일한 메모리를 공유하는 것이 보장됩니다.

이 방법은 중복 값이 ​​여러 개인 경우 차지하는 메모리를 줄이는 데 유용합니다.

예시

다음에서는 동일한 내용으로 두 개의 문자열(new 키워드 사용)을 만들고 "==" 연산자를 사용하여 비교합니다. 두 객체는 ​​같은 값을 가지지만 같은 객체(메모리)를 참조하지 않기 때문에 결과는 false가 됩니다.

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = "Hello";
      str2 = str2.intern();
      System.out.println(str1.equals(str2));
   }
}

출력

false

그러나 두 객체를 비교하기 전에 두 객체에 대해 intern 메소드를 호출하면 두 객체가 동일한 내용을 가지고 있는 경우 두 객체가 동일한 메모리를 공유하는지 확인하기 때문에 결과가 true가 됩니다.

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = new String("Hello");
      str2 = str2.intern();
      System.out.println(str1==str2);
   }
}

출력

true