2012-06-23 6 views
2

나는이 코드 조각을 발견하고 개발자가 대신 리터럴 상수 문자열의 문자 배열과 문자열 생성자를 사용하는 이유를 이해하고 싶습니다 :왜 상수에 char 배열로 문자열 생성자를 사용합니까?

static string atomLang = new String("lang".ToCharArray()); 
+1

문자열 풀링을 피하려면? – emesx

+0

코드를 좀 더 재미있게 만들려고 노력했을 수도 있습니다. :)). 나는 그 점에 대해 유감 스럽지만 농담을 말하는 것에 저항 할 수 없었다. –

+0

아마도 문자열로 초기화하고 싶다면'static string atomLang = "lang"'을 사용할 수 있습니다. 이미 문자열이 있다면'new'를 사용해야하는 이유는 무엇입니까? – benjer3

답변

5

내가 생각할 수있는 유일한 이유가있다 문자열의 interned instance에 대한 참조를 얻지 마십시오.

string str1 = "lang"; 
string str2 = "lang"; 
string str3 = new String("lang".ToCharArray()); 

Console.WriteLine(object.ReferenceEquals(str1, str2)); // Output: true 
Console.WriteLine(object.ReferenceEquals(str1, str3)); // Output: false 

이것은 실제 성능에 영향을 미치지 않습니다 (성능 차이는 제외).

+0

성능에 부정적인 영향을 미칠 수 있음을 분명히해야합니다. –

+0

@KonradRudolph : 네, 맞습니다. 여러 코어에서 공유 할 때 동일한 문자열에 대한 경합을 피하기 때문에 긍정적 인 효과가있을 수있는 드문 경우가있을 수 있습니다. – Douglas

+1

@Douglas, 다중 코어에 의해 동일한 문자열 액세스가 발생하면 공유 캐시 라인이 손상되지 않습니다. CPU는 읽기 전용 캐시 라인을 공유 할 수 있습니다. – usr

관련 문제