Is C# string a value type or a reference type?

黄舟
Release: 2017-03-04 10:34:19
Original
1663 people have browsed it

First look at the code:

int a = 1; int b = a; a = 2; bool valOrRef = b == 2 ;//false;
Copy after login

It can be seen that the int type is a value type, becausebhas not changed followinga.

Look at the following code again:

string str11 = "qa"; string str22 = str11; str11 = "qaz"; bool valOrRef2 = str22 == "qaz"; //false
Copy after login

The result is also false, so string is also a value type.

Look at the following code again:

string str1 = "qaz"; string str2 = "qaz"; bool refequ = object.ReferenceEquals(str1, str2); //true
Copy after login

refequ is equal to true. If string is really a value type, then how can refequ be true, because please look at the following code:

int a = 1; int b = 1; bool refequ2 = object.ReferenceEquals(a, b);//false
Copy after login

Int is a value type, this is certain, two int variables are declared.

This is a contradiction. How to explain it? String looks like value type, but it also looks like reference type.

Microsoft:string is reference type. So how to explain what looks like value type?

Please remember 2 points:

1)string objects, if the values are the same, their reference addresses are the same.
2)String objects, if the values are not equal, their reference addresses are not equal.

Analysis of the above code:

string str11 = "qa";//str11指向了内存addressA,数据为qa; string str22 = str11;//str22也指向内存addressA str11 = "qaz";//str11新指向了内存addressB,数据为qaz bool valOrRef2 = str22 == "qaz"; //false
Copy after login

Summary:

One of the most significant features of string is that it hasconstant invariance: Once we create a string and allocate a continuous memory space for it on the managed heap, we will not be able to modify the string in any way to make it longer, shorter, or change the format. All strings returned by various operations on this string are actually another recreated string, which itself will not produce any changes.

Postscript:
How is string efficiency?

The string object is called animmutable (read-only) object, because once the object is created, the value of the object cannot be modified. Sometimes it seems that it has been modified. In fact, the string has been specially processed. Every time the value is changed, a new string object will be created. The variable will point to this new object, while the original one still points to the original object, so it will not Change.This is also the reason why string is inefficient.

The above is the content of C# string: value type or reference type? For more related content, please pay attention to the PHP Chinese website (m.sbmmt.com)!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!