First look at the code:
int a = 1; int b = a; a = 2; bool valOrRef = b == 2 ;//false;
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
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
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
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
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)!