참조 유형과 값 유형의 차이를 이해할 수 있다고 생각했습니다. 'string'은 참조 유형의 동작을 유지하면서 값 유형 의 의미가 인 것으로 생각했습니다. 그런 다음 두 가지 경우 모두 True를 반환 할 것을 기대하면서이 작업을 시도했습니다. 내가 잘못 이해 한 것은 무엇입니까?string이 참조 유형 인 경우 strA의 값이이 경우 변경되지 않는 이유는 무엇입니까?
string strA = "AAA";
string strB = strA;
strB = "BBB";
Console.WriteLine($"strA is {strA} and strB is {strB}");
Console.WriteLine($"The statement: strA == strA is {strA == strB} \n");
Car car1 = new Car();
car1.Horsepower = 190;
Car car2 = car1;
car2.Horsepower = 200;
Console.WriteLine($"car1.Horsepower is {car1.Horsepower} and car2.Horsepower is {car2.Horsepower}");
Console.WriteLine($"The statement: car1 == car2 is {car1 == car2}");
출력 :
STRA이 AAA이고 STRB는 BBB
문입니다 : STRA가 STRA가
car1.Horsepower가 200 False입니다 ==와 car2.Horsepower가 200
진술 : car1 == car2는 True입니다.
일단 문자열 값이 설정되면 메모리의 해당 위치를 가리 킵니다. 결코 바뀔 수 없다. 새 값을 설정하면 실제로 새 값을 보유하는 메모리의 다른 위치에 새 포인터가 생깁니다. 이 동작을 원하면 문자열 작성기로 시도하십시오. StringBuilder builderA = 새 StringBuilder ("AAA"); StringBuilder builderB = builderA; builderB.Replace ("AAA", "BBB"); Console.WriteLine ($ "builderA는 {builderA.ToString()}이고 builderB는 {builderB.ToString()}")입니다. – Aaron
@Aaron : Ah. C#에서 해당 문자열을 변경할 수 있습니다. 나는 값을 바꿀 때 포인터가 바뀐다는 생각에 반대하지 않았다. StringBuilder에 대한 통찰력을 가져 주셔서 감사합니다. 내가 할 수만 있다면이 의견을 대답으로 표시 할 것입니다. – PakiPat
다른 '순수한'참조 유형에 공통적 인 문자열의 유일한 측면은 스택이 아닌 힙에 저장된다는 것입니다. – PakiPat