Was ist der Unterschied zwischen StringBiulder, String und StringBuffer?


Antwort 1:

Mutabilitätsunterschied:

String ist unveränderlich. Wenn Sie versuchen, ihre Werte zu ändern, wird ein anderes Objekt erstellt, während StringBuffer und StringBuilder veränderbar sind, damit sie ihre Werte ändern können.

Thread-Sicherheitsunterschied:

Der Unterschied zwischen StringBuffer und StringBuilder besteht darin, dass StringBuffer threadsicher ist. Wenn die Anwendung nur in einem einzelnen Thread ausgeführt werden muss, ist es besser, StringBuilder zu verwenden. StringBuilder ist effizienter als StringBuffer.

Situationen:

  • Wenn sich Ihre Zeichenfolge nicht ändern wird, verwenden Sie eine String-Klasse, da ein String-Objekt unveränderlich ist. Wenn sich Ihre Zeichenfolge ändern kann (Beispiel: viele Logik und Operationen bei der Erstellung der Zeichenfolge) und nur von einem einzigen Thread aus mit zugegriffen werden kann Ein StringBuilder ist gut genug. Wenn sich Ihr String ändern kann und von mehreren Threads aus darauf zugegriffen werden kann, verwenden Sie einen StringBuffer, da StringBuffer synchron ist, sodass Sie Thread-Sicherheit haben.

String, StringBuffer und StringBuilder


Antwort 2:

Der Hauptunterschied zwischen String, StringBuffer und StringBuilder in Java besteht darin, dass String ein unveränderliches Java-Objekt ist, während StringBuffer und StringBuilder veränderbare Java-Objekte sind.

Was ist ein unveränderliches Objekt?

Wenn wir sagen, dass ein Objekt unveränderlich ist, bedeutet dies einfach, dass der Wert des Objekts nach seiner Erstellung nicht mehr geändert werden kann. Lassen Sie uns dies anhand von Code veranschaulichen.

String str = "Hallo"; str = str + "Welt";

In Zeile 1 des Codes wird eine Zeichenfolge mit dem Wert "Hallo" erstellt, die in einem Feld mit dem Namen "str" ​​gespeichert ist. In Zeile 2 wird "Welt" mit dem vorherigen Wert von "str" ​​verknüpft, sodass der endgültige Wert "Hallo Welt" lautet Als ob es nur ein String-Objekt gab, das geändert wurde, aber unter der Haube ist das nicht passiert. Was tatsächlich passiert ist, ist, dass 3 verschiedene String-Objekte erstellt wurden. "Hallo" ist ein bestimmtes Objekt, "Welt" ist auch ein bestimmtes Objekt, ebenso wie "Hallo Welt". str ist nur eine Referenz, die schließlich auf "Hello World" verweist. Dies liegt daran, dass String immer unveränderlich ist, was bedeutet, dass er nicht geändert werden kann.

Führen Sie dieselbe Operation mit einem veränderlichen Objekt wie StringBuffer oder StringBuilder aus.

StringBuffer str = neuer StringBuffer ("Hallo"); str.append ("Welt");

StringBuffer enthält ein Array von Zeichen. In Zeile 2 wird also einfach "world" zu dem vorhandenen Zeichenarray hinzugefügt, das in diesem Fall "Hello" war. str wurde an Ort und Stelle geändert, um zu „Hello World“ zu gelangen. Dies bedeutet, dass während des gesamten Vorgangs nur eine bestimmte Instanz von StringBuffer vorhanden war. Die gleiche Erklärung gilt für StringBuilder.

Der Hauptunterschied zwischen StringBuffer und StringBuilder besteht darin, dass StringBuffer threadsicher ist, StringBuilder jedoch nicht. Dies bedeutet, dass wenn verschiedene Threads auf dieselbe Instanz eines StringBuffers zugreifen / diese ändern, ihr Zugriff so synchronisiert wird, dass das Ergebnis immer vorhersehbar ist. Da StringBuilder für die Verwendung durch einen einzelnen Thread konzipiert ist, sind die Operationen darauf schneller als die von StringBuffer, ansonsten haben sie meist identische Methoden.

Zeichenfolge (Java Platform SE 7)

StringBuffer (Java Platform SE 7)

StringBuilder (Java Platform SE 7)


Antwort 3:

Der Hauptunterschied zwischen String, StringBuffer und StringBuilder in Java besteht darin, dass String ein unveränderliches Java-Objekt ist, während StringBuffer und StringBuilder veränderbare Java-Objekte sind.

Was ist ein unveränderliches Objekt?

Wenn wir sagen, dass ein Objekt unveränderlich ist, bedeutet dies einfach, dass der Wert des Objekts nach seiner Erstellung nicht mehr geändert werden kann. Lassen Sie uns dies anhand von Code veranschaulichen.

String str = "Hallo"; str = str + "Welt";

In Zeile 1 des Codes wird eine Zeichenfolge mit dem Wert "Hallo" erstellt, die in einem Feld mit dem Namen "str" ​​gespeichert ist. In Zeile 2 wird "Welt" mit dem vorherigen Wert von "str" ​​verknüpft, sodass der endgültige Wert "Hallo Welt" lautet Als ob es nur ein String-Objekt gab, das geändert wurde, aber unter der Haube ist das nicht passiert. Was tatsächlich passiert ist, ist, dass 3 verschiedene String-Objekte erstellt wurden. "Hallo" ist ein bestimmtes Objekt, "Welt" ist auch ein bestimmtes Objekt, ebenso wie "Hallo Welt". str ist nur eine Referenz, die schließlich auf "Hello World" verweist. Dies liegt daran, dass String immer unveränderlich ist, was bedeutet, dass er nicht geändert werden kann.

Führen Sie dieselbe Operation mit einem veränderlichen Objekt wie StringBuffer oder StringBuilder aus.

StringBuffer str = neuer StringBuffer ("Hallo"); str.append ("Welt");

StringBuffer enthält ein Array von Zeichen. In Zeile 2 wird also einfach "world" zu dem vorhandenen Zeichenarray hinzugefügt, das in diesem Fall "Hello" war. str wurde an Ort und Stelle geändert, um zu „Hello World“ zu gelangen. Dies bedeutet, dass während des gesamten Vorgangs nur eine bestimmte Instanz von StringBuffer vorhanden war. Die gleiche Erklärung gilt für StringBuilder.

Der Hauptunterschied zwischen StringBuffer und StringBuilder besteht darin, dass StringBuffer threadsicher ist, StringBuilder jedoch nicht. Dies bedeutet, dass wenn verschiedene Threads auf dieselbe Instanz eines StringBuffers zugreifen / diese ändern, ihr Zugriff so synchronisiert wird, dass das Ergebnis immer vorhersehbar ist. Da StringBuilder für die Verwendung durch einen einzelnen Thread konzipiert ist, sind die Operationen darauf schneller als die von StringBuffer, ansonsten haben sie meist identische Methoden.

Zeichenfolge (Java Platform SE 7)

StringBuffer (Java Platform SE 7)

StringBuilder (Java Platform SE 7)


Antwort 4:

Der Hauptunterschied zwischen String, StringBuffer und StringBuilder in Java besteht darin, dass String ein unveränderliches Java-Objekt ist, während StringBuffer und StringBuilder veränderbare Java-Objekte sind.

Was ist ein unveränderliches Objekt?

Wenn wir sagen, dass ein Objekt unveränderlich ist, bedeutet dies einfach, dass der Wert des Objekts nach seiner Erstellung nicht mehr geändert werden kann. Lassen Sie uns dies anhand von Code veranschaulichen.

String str = "Hallo"; str = str + "Welt";

In Zeile 1 des Codes wird eine Zeichenfolge mit dem Wert "Hallo" erstellt, die in einem Feld mit dem Namen "str" ​​gespeichert ist. In Zeile 2 wird "Welt" mit dem vorherigen Wert von "str" ​​verknüpft, sodass der endgültige Wert "Hallo Welt" lautet Als ob es nur ein String-Objekt gab, das geändert wurde, aber unter der Haube ist das nicht passiert. Was tatsächlich passiert ist, ist, dass 3 verschiedene String-Objekte erstellt wurden. "Hallo" ist ein bestimmtes Objekt, "Welt" ist auch ein bestimmtes Objekt, ebenso wie "Hallo Welt". str ist nur eine Referenz, die schließlich auf "Hello World" verweist. Dies liegt daran, dass String immer unveränderlich ist, was bedeutet, dass er nicht geändert werden kann.

Führen Sie dieselbe Operation mit einem veränderlichen Objekt wie StringBuffer oder StringBuilder aus.

StringBuffer str = neuer StringBuffer ("Hallo"); str.append ("Welt");

StringBuffer enthält ein Array von Zeichen. In Zeile 2 wird also einfach "world" zu dem vorhandenen Zeichenarray hinzugefügt, das in diesem Fall "Hello" war. str wurde an Ort und Stelle geändert, um zu „Hello World“ zu gelangen. Dies bedeutet, dass während des gesamten Vorgangs nur eine bestimmte Instanz von StringBuffer vorhanden war. Die gleiche Erklärung gilt für StringBuilder.

Der Hauptunterschied zwischen StringBuffer und StringBuilder besteht darin, dass StringBuffer threadsicher ist, StringBuilder jedoch nicht. Dies bedeutet, dass wenn verschiedene Threads auf dieselbe Instanz eines StringBuffers zugreifen / diese ändern, ihr Zugriff so synchronisiert wird, dass das Ergebnis immer vorhersehbar ist. Da StringBuilder für die Verwendung durch einen einzelnen Thread konzipiert ist, sind die Operationen darauf schneller als die von StringBuffer, ansonsten haben sie meist identische Methoden.

Zeichenfolge (Java Platform SE 7)

StringBuffer (Java Platform SE 7)

StringBuilder (Java Platform SE 7)