정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

String.Intern 메서드

2013-12-13

지정된 String에 대한 시스템의 참조를 검색합니다.

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

public static string Intern(
	string str
)

매개 변수

str
형식: System.String
내부 풀에서 검색할 문자열입니다.

반환 값

형식: System.String
str이 내부 풀에 추가되었으면 해당 시스템 참조이고, 그렇지 않으면 str 값을 가진 문자열에 대한 새 참조입니다.

예외조건
ArgumentNullException

strnull인 경우

공용 언어 런타임은 내부 풀이라는 테이블을 유지함으로써 문자열을 저장합니다. 이 테이블에는 프로그램에서 프로그램 방식으로 만들어지거나 선언된 고유한 각 리터럴 문자열에 대한 단일 참조가 들어 있습니다. 따라서 특정한 값을 가진 리터럴 문자열의 인스턴스는 시스템에서 한 번만 존재합니다.

예를 들어 여러 변수에 같은 리터럴 문자열을 할당하는 경우 런타임은 내부 풀에서 리터럴 문자열에 대한 같은 참조를 검색해서 각 변수에 할당합니다.

Intern 메서드는 내부 풀을 사용하여 str의 값과 같은 문자열을 검색합니다. 문자열이 있으면 내부 풀의 참조가 반환됩니다. 문자열이 없으면 str에 대한 참조가 내부 풀에 추가되고 이 참조가 반환됩니다.

다음 예제에서 값이 "MyTest"인 문자열 s1은 프로그램의 리터럴이므로 이미 내부 풀에 추가되어 있습니다. System.Text.StringBuilder 클래스는 s1과 같은 값을 가진 새 문자열 개체를 생성합니다. 이 문자열에 대한 참조가 s2에 할당됩니다. Intern 메서드는 s2와 같은 값을 가진 문자열을 검색합니다. 해당 문자열이 존재하므로 s1로 할당된 같은 참조가 반환됩니다. 그런 다음 이 참조를 s3에 할당합니다. 참조 s1s2는 서로 다른 개체를 참조하므로 같지 않은 것으로 간주되지만, 참조 s1s3은 같은 문자열을 참조하므로 서로 같은 것으로 간주됩니다.


string s1 = "MyTest";
string s2 = new StringBuilder().Append("My").Append("Test").ToString();
string s3 = String.Intern(s2);
outputBlock.Text += ((Object)s2 == (Object)s1) + "\n"; // Different references.
outputBlock.Text += ((Object)s3 == (Object)s1) + "\n"; // The same reference.


이 메서드와 IsInterned 메서드를 비교해 보세요.

다음 코드 예제에서는 값이 같은 세 개의 문자열을 사용하여 새로 만든 문자열과 내부 풀에 추가된 문자열이 같은지 여부를 확인합니다.


// Sample for String.Intern(String)
using System;
using System.Text;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      String s1 = "MyTest";
      String s2 = new StringBuilder().Append("My").Append("Test").ToString();
      String s3 = String.Intern(s2);
      outputBlock.Text += String.Format("s1 == '{0}'", s1) + "\n";
      outputBlock.Text += String.Format("s2 == '{0}'", s2) + "\n";
      outputBlock.Text += String.Format("s3 == '{0}'", s3) + "\n";
      outputBlock.Text += String.Format("Is s2 the same reference as s1?: {0}", (Object)s2 == (Object)s1) + "\n";
      outputBlock.Text += String.Format("Is s3 the same reference as s1?: {0}", (Object)s3 == (Object)s1) + "\n";
   }
}
/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시: