MSDN은String.Intern과 String.IsInterned의 차이점은 무엇입니까?
String.Intern이
및
String.IsInterned 지정된 문자열에 참조를 검색하는 지정된 String에 대한 시스템의 참조를 검색하는 상태.
나는 IsInterned가 지정된 문자열이 인계되었는지 여부를 나타내는 bool을 리턴해야한다고 생각합니다. 그 생각이 맞습니까? 나는 그것이 적어도 .net 프레임 워크 명명 규칙과 일치하지 않는다는 것을 의미한다.
string s = "PK";
string k = "PK";
Console.WriteLine("s has hashcode " + s.GetHashCode());
Console.WriteLine("k has hashcode " + k.GetHashCode());
Console.WriteLine("PK Interned " + string.Intern("PK"));
Console.WriteLine("PK IsInterned " + string.IsInterned("PK"));
출력은 :
는 다음 코드 작성들 해시를 갖고 -837830672
k는 해시를 -837830672
PK 구금을 갖는다 PK
PK IsInterned PK "PK"를 반환 왜 ("PK") string.IsInterned되어
?
이 질문에 http://stackoverflow.com/questions/372547/where-do-java-and-net-string-literals-reside/372559#372559 –
이름은 매우 비싸다. 아마도 그것은 "IfInterned"의 오타 였을 것입니다. – Greg
'GetHashCode'를 사용함에 주목하십시오 :'System.String' 클래스 *가 * GetHashCode()를 오버라이드합니다. 따라서 이러한 메소드 호출은 인스턴스가 다를 수 있는지 여부를 확인하는 데 유용하지 않습니다. 대신'using System.Runtime.CompilerServices; 지시문을 포함하고'RuntimeHelpers.GetHashCode (string)'을 사용하십시오. 다음은 좋은 예입니다 :'string s = "PK"; 문자열 t = 'P'.ToString() + "K"; 콘솔.WriteLine ("s에는 재정의되지 않은 해시 코드가 있습니다"+ RuntimeHelpers.GetHashCode (s)); Console.WriteLine ("t에는 오버라이드되어 있지 않은 해시 코드가 있습니다."+ RuntimeHelpers.GetHashCode (t));'. –