>  기사  >  백엔드 개발  >  C# 문자열은 값 유형인가요, 아니면 참조 유형인가요?

C# 문자열은 값 유형인가요, 아니면 참조 유형인가요?

黄舟
黄舟원래의
2017-03-04 10:34:191719검색

먼저 코드를 살펴보세요:

           int a = 1;           
           int b = a;
           a = 2;           
           bool valOrRef = b == 2  ;//false;

ba와 변경되지 않으므로 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);//false

Int는 값 유형이므로 두 개의 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)!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.