Home  >  Article  >  Backend Development  >  .NET Framework - Detailed explanation of whether string is value or reference type

.NET Framework - Detailed explanation of whether string is value or reference type

黄舟
黄舟Original
2017-03-18 13:37:381353browse

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, because b has not changed following a.

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) stringobject, if the value is the same, its reference address will be 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 has constant 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 an immutable (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 detailed content of .NET Framework - Detailed explanation of whether string is value or reference type. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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