Dieser Artikel zeigt den Zeitunterschied, der für ähnliche Operationen an einem
String
-Objekt und einem` StringBuffer`-Objekt benötigt wird.
-
Da String eine unveränderliche Klasse ist, wird für jedes Objekt ein neues Objekt erzeugt
Zeit, an der eine Operation ausgeführt wird . StringBuffer ist eine veränderliche Klasse, der Overhead des Objekts
Instantiierung während des Betriebs wird entfernt. Daher ist die Zeit für Operationen weniger als bei "String"
1. String vs StringBuffer
Lassen Sie uns nun die Ausführungszeit von
String
-Klasse und` StringBuffer`-Klasse vergleichen, um 10000 Zeichen anzufügen.
TimeTester.java
package com.techfou; public class TimeTester{ public static void main(String[]args) { String aString = ""; long before = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { aString = aString + "x"; } long after = (System.currentTimeMillis()); System.out.println("Execution Time for String: " + (after - before)); before = System.currentTimeMillis(); StringBuffer aStringBuffer = new StringBuffer(); for (int i = 0; i < 10000; i++) { aStringBuffer.append("x"); } after = (System.currentTimeMillis()); System.out.println("Execution Time for StringBuffer: " + (after - before)); } }
Beim Ausführen des obigen Codes erhalten Sie die folgende Ausgabe. Die Ausgabe kann je nach Prozessorgeschwindigkeit variieren. Wie deutlich zu erkennen ist, dauert es 128 Millisekunden, um 10000 Strings an ein String-Objekt anzuhängen.
Im Vergleich dazu benötigt StringBuffer nur 11 Millisekunden, um dies zu ermöglichen.
Execution Time for String: 128 Execution Time for StringBuffer: 11
Dies beweist, dass
StringBuffer
schneller ist als` String`. Die unveränderliche Eigenschaft von
String
macht es jedoch Thread-sicher.
2. Schlussfolgerung
Abschließend kann man sagen, dass
StringBuffer
eine bessere Wahl ist als` String`, wenn Sie mit seiner Syntax und den von der Klasse bereitgestellten Funktionen vertraut sind. Es ist schneller und veränderbar. "String" ist auf die Verwendung in Situationen beschränkt, in denen schreibgeschützte Objekte erforderlich sind oder die Bearbeitung von Zeichenfolgen erforderlich ist.
Referenzen
-
% E2% 80% 9Dhttp://www.javaworld.com/article/2076072/build-ci-sdlc/stringbuffer-versus-string.html%E2%80%9D[Warum
StringBuffer ist schneller als String]. http://docs.oracle.com/javase/7/docs/api/java/lang/String.html [String
Javadocs]. https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html [StringBuffer
Javadocs]. https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html [Definition
wie in Java-Dokumenten]