먼저 코드를 살펴보세요:
int a = 1; int b = a; a = 2; bool valOrRef = b == 2 ;//false;
b는 a와 변경되지 않으므로 int 유형이 값 유형임을 알 수 있습니다. .
다음 코드를 다시 살펴보세요.
string str11 = "qa"; string str22 = str11; str11 = "qaz"; bool valOrRef2 = str22 == "qaz"; //false
결과도 false이므로 문자열도 값 유형입니다.
다음 코드를 다시 살펴보세요.
string str1 = "qaz"; string str2 = "qaz"; bool refequ = object.ReferenceEquals(str1, str2); //true
refequ는 true입니다. string이 실제로 값 유형인 경우 어떻게 refequ가 true일 수 있습니까? 다음 코드를 살펴보시기 바랍니다. 🎜>
int a = 1; int b = 1; bool refequ2 = object.ReferenceEquals(a, b);//falseInt는 값 유형이므로 두 개의 int 변수가 선언됩니다. 모순입니다. 어떻게 설명해야 할까요? 문자열은 값형처럼 보이지만 참조형처럼 보입니다. Microsoft:
문자열은 참조 유형입니다. 그렇다면 값 유형이 어떻게 보이는지 설명하는 방법은 무엇입니까?
2가지 사항을 기억해주세요: 1) 문자열 객체는 값이 동일하면 참조 주소도 동일합니다. 2)
문자열 객체의 경우 값이 동일하지 않으면 해당 참조 주소도 동일하지 않습니다.
string str11 = "qa";//str11指向了内存addressA,数据为qa; string str22 = str11;//str22也指向内存addressA str11 = "qaz";//str11新指向了内存addressB,数据为qaz bool valOrRef2 = str22 == "qaz"; //false요약:
추첨:문자열의 가장 중요한 특징 중 하나는 상수 불변성: 일단 문자열을 생성하고 관리되는 힙에 연속적인 메모리 공간을 할당하면 문자열을 더 길거나 짧게 만들거나 형식을 변경하기 위해 어떤 식으로든 문자열을 수정할 수 없습니다. 이 문자열에 대한 다양한 작업에 의해 반환된 모든 문자열은 실제로 재생성된 또 다른 문자열이며 자체적으로는 변경 사항이 생성되지 않습니다.
문자열 효율성은 어떤가요?
불변(읽기 전용) 개체라고 합니다. 개체가 생성되면 해당 값을 수정할 수 없기 때문입니다. 실제로는 문자열이 특별히 처리된 것처럼 보입니다. 값이 변경될 때마다 새 문자열 개체가 생성되지만 원래 개체는 여전히 개체를 가리킵니다. 원본 개체이므로 변경되지 않습니다. 문자열이 비효율적인 이유이기도 합니다.
위 내용은 C# 문자열은 값형인가요, 참조형인가요? CN)!