Heim  >  Artikel  >  Java  >  Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

青灯夜游
青灯夜游nach vorne
2019-11-27 17:15:541736Durchsuche

In Java-Entwicklungsinterviews werden wir oft nach den Unterschieden zwischen String, StringBuider und StringBuffer gefragt. Viele Leute antworten nicht umfassend und ausführlich genug. Was sind also die Unterschiede zwischen ihnen?

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Alle drei werden zum Betreiben von Zeichenfolgen verwendet. String wird normalerweise zum Definieren einer Variablen verwendet, während StringBuilder StringBuffer normalerweise zum Verbinden von Zeichenfolgen und anderen Operationen verwendet wird. Tatsächlich kann String jedoch auch zum Verbinden von Zeichenfolgen verwendet werden. Warum verwenden wir ihn jedoch selten? Beginnen wir mit den zugrunde liegenden Codes der drei.

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Der zugrunde liegende Code von String ist ein mit final modifiziertes char-Array, was bedeutet, dass nach der Definition einer String-Variablen der Inhalt der Variablen unveränderlich ist.

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Sowohl StringBuilder als auch StringBuffer erben von AbstractStringBuilder, das Char-Array dieser Klasse jedoch nicht Verwenden Sie die endgültige Änderung. Der Inhalt ist variabel. Was bedeutet das?

Zum Beispiel:

String s1= "a";
String s2 = new String("b") ;
String s3 = s1+s2;

Wenn ja, erhalten wir die Zeichenfolge „ab“, da am Ende von String keine unveränderliche Zeichenfolge vorhanden ist, sodass drei Objekte erstellt werden, die alle erstellt werden belegen Speicher und dies Die drei Objekte haben nie Referenzen verloren, sodass die JVM nicht durch Müll gesammelt werden kann, was zu einer großen Verschwendung von Speicherressourcen führt. Dies wird in unserer Entwicklung nicht empfohlen, aber StringBuilder und StringBuffer haben kein solches Problem.

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Durch den zugrunde liegenden Code können wir erkennen, dass StringBuilder und StringBuffer beim Spleißen von Zeichenfolgen verwendet werden. Bestimmen Sie, ob die Länge der Zeichenfolge ausreicht, und erstellen Sie ein neues Array, um die Daten zu kapseln, während das ursprüngliche Objekt die Referenz aufgibt und auf die Speicherbereinigung wartet, wodurch die Speicherverschwendung verringert wird. Daher verwenden wir normalerweise beim Spleißen von Zeichenfolgen Verwenden Sie StringBuilder und StringBuffer, aber die Ausführungseffizienz der beiden ist unterschiedlich. Warum ist das so?

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Eine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder

Durch den zugrunde liegenden Quellcode können Sie feststellen, dass StringBuffer beim Spleißen von Zeichenfolgen Synchronisationssperren verwendet, was die Sicherheit verbessert, StringBuilder jedoch nicht Verwenden Sie es. Synchronisierungssperre, damit die Effizienz verbessert wird.

Jetzt sollten Sie die Unterschiede zwischen den dreien verstehen! !

Dieser Artikel stammt aus der Rubrik Java-Einführung, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Unterschiede zwischen String, StringBuffer und StringBuilder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:源码时代. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Anmerkungen zu Java-GrundlagenNächster Artikel:Anmerkungen zu Java-Grundlagen