Was bedeutet unveränderlich bedeuten?
Ob ein string ist unveränderlich, bedeutet das, dass....
(lasst uns davon ausgehen, JavaScript)
var str = 'foo';
alert(str.substr(1)); //oo
alert(str); //foo
Bedeutet es, beim aufrufen von Methoden auf einen string, wird der string geändert, aber es wird nicht ändern Sie die ursprüngliche Zeichenfolge?
Wenn der string war veränderlich, bedeutet das, dass der 2. alert()
zurückkehren würde oo
auch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es bedeutet, dass, sobald Sie instanziieren des Objekts können Sie dessen Eigenschaften nicht geändert werden. In Ihrem ersten Alarm Sie ändern sich nicht foo. Sie erstellen einen neuen string. Dies ist der Grund, warum in Ihrem zweiten Ausschreibung wird es zeigen "foo" anstelle von oo.
Ja. Nichts kann ändern Sie die Zeichenfolge, sobald es erstellt wird. Nun bedeutet dies nicht, dass Sie können nicht zuweisen, ein neues string-Objekt, das
str
variable. Sie können einfach nicht ändern, das aktuelle Objekt, die str verweist.Technisch nicht, da die substring-Methode gibt eine neue Zeichenkette. Macht ein Objekt verändert, wäre das nicht die Methode ändern. Macht es wandelbar ist, bedeutet, dass technisch gesehen, könnte man es so machen, dass substring verändern die ursprüngliche Zeichenfolge, anstatt ein neues zu erstellen.
Auf einem niedrigeren Niveau, Unveränderlichkeit bedeutet, dass der Speicher die Zeichenfolge gespeichert wird nicht geändert werden. Sobald Sie erstellen Sie einen string -
"foo"
Speicher zugeordnet ist, um den Wert"foo"
. Dieser Speicher wird nicht verändert. Wenn Sie die Zeichenfolge ändern mit, sagen wir,substr(1)
eine neue Zeichenfolge erstellt, und einen anderen Teil des Arbeitsspeichers gespeichert wird"oo"
. Jetzt haben Sie zwei strings im Speicher"foo"
und"oo"
. Auch wenn du nicht gehst, zu verwenden"foo"
mehr, es bleibe dabei, bis es von der garbage Collection eingesammelt.Ein Grund, warum die string-Operationen sind vergleichsweise teuer.
Immutable bedeutet, dass die nicht geändert werden können oder geändert werden.
Also, wenn Sie einen Wert zuweisen, um einen string, dieser Wert ist von Grund auf neu erstellt, im Gegensatz zu der ersetzt werden soll. Also jedes mal wenn ein neuer Wert zugewiesen wird, der gleiche string, der eine Kopie erstellt wird. Also in Realität, Sie werden sich nie ändern Sie den ursprünglichen Wert.
Ich bin nicht sicher über JavaScript, sondern in Java strings in einem weiteren Schritt zu der Unveränderlichkeit, mit der "String Constant Pool". Strings konstruiert werden können mit string-literalen (
"foo"
) oder mit einemString
Konstruktor der Klasse. Strings konstruiert mit string-Literale sind ein Teil der String-Constant-Pool und den gleichen string-literal wird immer die gleiche memory-Adresse aus dem pool.Beispiel:
In den obigen beiden
lit1
undlit2
sind konstruiert unter Verwendung der gleichen string-literal, also, Sie zeigt auf den gleichen Speicher-Adresse;lit1 == lit2
Ergebnisse intrue
, weil Sie genau das gleiche Objekt.Jedoch
cons
ist konstruiert mit der Klasse Konstruktor. Obwohl der parameter ist die gleiche string-Konstante Konstruktor allokiert neuen Speicher fürcons
, Bedeutungcons
ist nicht das gleiche Objekt wielit1
undlit2
, obwohl die gleichen Daten enthält.Natürlich, da die drei strings enthalten alle den gleichen Charakter-Daten mit Hilfe der
equals
Methode true zurück.(Beide Arten von string-Konstruktion sind unveränderlich, natürlich)
Unveränderlich bedeutet der Wert kann nicht geändert werden. Einmal erstellt ein string-Objekt kann nicht modifiziert werden, wie seine unveränderlich. Wenn Sie eine Anfrage ein substring eines Strings in einen neuen String mit dem gewünschten Teil erstellt wird.
Verwendung von StringBuffer beim Bearbeiten von Zeichenfolgen anstelle macht den Betrieb effizienter als StringBuffer speichert den string in ein Zeichen-array mit Variablen, um zu halten die Kapazität der Zeichen-array und die Länge des Arrays(String in ein char-array form)
Text-book definition der Veränderlichkeit haftet oder Thema zu ändern oder änderungen vorbehalten.
Bei der Programmierung verwenden wir das Wort, um meine Objekte, deren Status darf im Laufe der Zeit ändern. Ein unveränderbarer Wert ist das genaue Gegenteil – nachdem es erstellt wurde, kann es nie ändern.
Wenn dies seltsam scheint, Erlaube ich mir Sie daran zu erinnern, dass viele der Werte, die wir benutzen, sind in der Tat unabänderlich.
Ich glaube, niemand wird überrascht sein zu erfahren, dass die zweite Zeile ändert in keiner Weise die string-Anweisung.
In der Tat, keine string-Methoden ändern Sie die Zeichenfolge, die Sie betreiben, Sie alle wieder neue Saiten. Der Grund dafür ist, dass die strings sind unveränderlich, die Sie nicht ändern können, wir können immer nur neue Saiten.
Strings sind nicht der einzige, unveränderliche Werte gebaut und in JavaScript. Die zahlen sind unveränderlich zu. Können Sie sich überhaupt vorstellen, einer Umgebung, wo die Auswertung des Ausdrucks 2 + 3 ändert sich die Bedeutung der Zahl 2? Es klingt absurd, doch wir haben dies mit unseren Objekten und arrays die ganze Zeit.
Strings zu stapeln... ein einfach zu verstehen am Beispiel von Eric Lippert ' s blog:
PATHFINDING Mit A* in C# 3.0-Teil Zwei...
In die Tiefe zu gehen auf understaning Unveränderlichkeit, Lesen Sie Eric ' s Beiträge, beginnend mit diesem:
Unveränderlichkeit in C#, Teil Eins: Arten der Unveränderlichkeit
Einen Weg, um zu begreifen, dieses Konzept ist zu sehen, wie javascript behandelt alle Objekte, die durch einen Verweis. Was bedeutet, dass alle Objekte veränderlich nach instanziiert werden, das heißt, Sie können hinzufügen, ein Objekt mit neuen Eigenschaften und Methoden. Das ist wichtig, denn wenn Sie wollen ein Objekt immutable Objekt nicht ändern können, nachdem Sie instanziiert wird.