Is C# string a value type or a reference type?
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) 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 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 content of C# string: value type or reference type? For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Guide to Active Directory with C#. Here we discuss the introduction and how Active Directory works in C# along with the syntax and example.

Guide to C# Serialization. Here we discuss the introduction, steps of C# serialization object, working, and example respectively.

Guide to Random Number Generator in C#. Here we discuss how Random Number Generator work, concept of pseudo-random and secure numbers.

Guide to C# Data Grid View. Here we discuss the examples of how a data grid view can be loaded and exported from the SQL database or an excel file.

Guide to Patterns in C#. Here we discuss the introduction and top 3 types of Patterns in C# along with its examples and code implementation.

Guide to Prime Numbers in C#. Here we discuss the introduction and examples of prime numbers in c# along with code implementation.

Guide to Factorial in C#. Here we discuss the introduction to factorial in c# along with different examples and code implementation.

The difference between multithreading and asynchronous is that multithreading executes multiple threads at the same time, while asynchronously performs operations without blocking the current thread. Multithreading is used for compute-intensive tasks, while asynchronously is used for user interaction. The advantage of multi-threading is to improve computing performance, while the advantage of asynchronous is to not block UI threads. Choosing multithreading or asynchronous depends on the nature of the task: Computation-intensive tasks use multithreading, tasks that interact with external resources and need to keep UI responsiveness use asynchronous.
