2009-02-03 2 views

답변

40

문자열은 참조 유형입니다. 그러나 그들은 변경할 수 없습니다 (변경할 수 없습니다). 따라서 값으로 복사하거나 참조로 복사하면 상관 없습니다.

얕은 복사가 수행되면 참조가 복사되지만 변경할 수 없으므로 두 개체에 동시에 적용 할 수 없습니다.

+0

그래서 복사 객체의 문자열을 변경하면 새 참조가있는 새 문자열이 만들어 집니까? 그래서 oldString = oldString + "A"와 같은 것을 만들 때, 새로운 참조로 새로운 객체를 생성하고 있습니까? – danmine

+1

... 이것은 String.Replace가 문자열을 변경하는 대신 새 문자열을 반환해야하는 이유를 설명합니다. – stusmith

+0

변경 가능한 문자열이 필요한 경우 StringBuilder 사용을 고려하십시오. – stusmith

6

참조 ("포인터"로 생각) 만 복사 할 수 있습니다. 두 개의 참조는 분리되어 있지만 (동일한 값을 가지게됩니다) 단 하나의 문자열 객체 만 있습니다.

21

이 고려 :

public class Person 
{ 
    string name; 
    // Other stuff 
} 

당신이 MemberwiseClone를 호출하는 경우, 당신은 사람의 두 개의 인스턴스, 그러나 그들의 name 변수하게 될 겁니다 뚜렷한 반면, 같은 값을가집니다 - 그들은 참조 것 같은 캐릭터 라인 인스턴스 이것은 얕은 복제이기 때문입니다.

두 개의 변수 자체가 분리되어 있기 때문에 인스턴스 중 하나에서 이름을 변경하더라도 다른 인스턴스에는 영향을주지 않습니다. 다른 인스턴스를 참조하기 위해 이들 중 하나의 값을 변경하는 것입니다.

관련 문제