Heim > Backend-Entwicklung > C#.Net-Tutorial > .NET Framework – Detaillierte Erläuterung, ob String ein Wert oder ein Referenztyp ist

.NET Framework – Detaillierte Erläuterung, ob String ein Wert oder ein Referenztyp ist

黄舟
Freigeben: 2017-03-18 13:37:38
Original
1408 Leute haben es durchsucht

Schauen Sie sich zunächst den Code an:

           int a = 1;           
           int b = a;
           a = 2;           
           bool valOrRef = b == 2  ;//false;
Nach dem Login kopieren

Sie können sehen, dass der int-Typ ein Werttyp ist, da sich b nach a nicht ändert.

Sehen Sie sich den folgenden Code noch einmal an:

            string str11 = "qa";            
            string str22 = str11;
            str11 = "qaz";            
            bool valOrRef2 = str22 == "qaz"; //false
Nach dem Login kopieren

Das Ergebnis ist ebenfalls falsch, daher ist string auch ein Werttyp.

Sehen Sie sich den folgenden Code noch einmal an:

            string str1 = "qaz";            
            string str2 = "qaz";            
            bool refequ = object.ReferenceEquals(str1, str2); //true
Nach dem Login kopieren

refequ ist gleich true Wenn string wirklich ein Werttyp ist, wie kann refequ dann true sein, denn schauen Sie sich bitte den folgenden Code an :

            int a = 1;            
            int b = 1;            
            bool refequ2 = object.ReferenceEquals(a, b);//false
Nach dem Login kopieren

 int ist ein Werttyp, das ist sicher, zwei intVariablen werden deklariert.

Das ist ein Widerspruch. String sieht aus wie ein Werttyp, aber er sieht auch wie ein Referenztyp aus.

Microsoft: String ist Referenztyp. Wie lässt sich also erklären, was wie ein Werttyp aussieht?

Bitte denken Sie an 2 Punkte:

1) String Objekt , wenn die Werte gleich sind, sind ihre Referenzadressen das gleiche.
2) Zeichenfolgenobjekte. Wenn die Werte nicht gleich sind, sind ihre Referenzadressen nicht gleich.

Analyse des obigen Codes:

            string str11 = "qa";//str11指向了内存addressA,数据为qa;
            string str22 = str11;//str22也指向内存addressA
            str11 = "qaz";//str11新指向了内存addressB,数据为qaz
            bool valOrRef2 = str22 == "qaz"; //false
Nach dem Login kopieren

Zusammenfassung:

Eines der wichtigsten Merkmale von Zeichenfolgen ist, dass sie über Folgendes verfügen Konstante Stabilität : Sobald wir eine Zeichenfolge erstellt und ihr einen kontinuierlichen Speicherplatz auf dem verwalteten Heap zugewiesen haben, können wir die Zeichenfolge in keiner Weise ändern, um sie zu verlängern, zu verkürzen oder zu ändern das Format. Alle von verschiedenen Operationen an dieser Zeichenfolge zurückgegebenen Zeichenfolgen sind tatsächlich eine weitere neu erstellte Zeichenfolge, die selbst keine Änderungen hervorruft.

Postscript:
Wie ist die Saiteneffizienz?

Das String-Objekt wird als unveränderliches (schreibgeschütztes) Objekt bezeichnet, da sein Wert nach der Erstellung des Objekts nicht mehr geändert werden kann. Manchmal scheint es, dass die Zeichenfolge speziell verarbeitet wurde. Bei jeder Änderung des Werts wird ein neues Zeichenfolgenobjekt erstellt, während die ursprüngliche Variable weiterhin darauf verweist das ursprüngliche Objekt, sodass es sich nicht ändert. Dies ist auch der Grund, warum String ineffizient ist.

Das obige ist der detaillierte Inhalt von.NET Framework – Detaillierte Erläuterung, ob String ein Wert oder ein Referenztyp ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage