, 나는 호출하는 경우 :리터럴 문자열 할당이 String 생성자를 이와 같이 호출합니까? 호기심에서
string txt = "text";
는 무대 뒤에서,이 전화를 할 것인가?
string txt = new String("text".ToCharArray())?
, 나는 호출하는 경우 :리터럴 문자열 할당이 String 생성자를 이와 같이 호출합니까? 호기심에서
string txt = "text";
는 무대 뒤에서,이 전화를 할 것인가?
string txt = new String("text".ToCharArray())?
아니요. 이 코드는 직접 IL stloc
명령으로 변환됩니다. 기본적으로 다음과 같이 컴파일됩니다.
ldstr "text"
stloc.0
내가 그것을 의심 - 왜 것 그것
그런데 왜 자신을 찾아 실행 ILDASM과 intern pool 저장을에서
string txt1 = "text";
로드 문자열 "text"
을 생성 어떤 코드를 볼 수 없습니다 txt1
변수의 참조로 사용됩니다.
따라서, 예를 들어, 당신이있는 경우 다음 ReferenceEquals(txt2, txt3) == true
string txt2 = "text";
string txt3 = "text";
, 두 변수는 인턴 수영장에서 동일한 문자열 객체를 참조하기 때문이다.
String Constructor은 새로운 비 내부 문자열 개체를 만듭니다.
string txt4 = new String("text".ToCharArray());
so ReferenceEquals(txt1, txt4) == false
.
예외가 있습니다. new String(new char[0])
은 인턴 풀의 ""
문자열 개체에 대한 참조를 반환합니다.