Ausführliche Erläuterung der StringBuffer-Klasse --- Java
- 1. Der Unterschied zwischen String, StringBuffer und StringBuilder
- 2. Quellcodeanalyse
- 3. StringBuffer-Methode
-
- 3.1 StringBuffer append (xxx): Bietet viele append()-Methoden für die String-Verkettung
- 3.2 StringBuffer delete (int start, int end): löscht den Inhalt an der angegebenen Stelle
- 3.3 StringBuffer replace (int start, int end, String str): Ersetze die Position [start, end] durch str
- 3.4 StringBuffer insert (int offset, xxx): Fügt xxx an der angegebenen Position ein
- 3.5 StringBuffer reverse (): Kehrt die aktuelle Zeichenfolge um
- 3.6 StringBuffer enthält auch String-Methoden
- 4. Effizienzvergleich von String, StringBuffer und StringBuilder
1. Der Unterschied zwischen String, StringBuffer und StringBuilder
String: eine unveränderliche Zeichenfolge; die untere Schicht verwendet char[] zum Speichern
StringBuffer: eine variable Zeichenfolge; Thread-sicher, geringe Effizienz; die untere Schicht verwendet char[] zum Speichern
StringBuilder: eine variable Zeichenfolge; Thread-unsicher, hohe Effizienz; Die unterste Schicht wird in char[] gespeichert
[Anmerkung]: StringBuffer und StringBuilder sind im Wesentlichen gleich, aber StringBuffer ist Thread-sicher, während StringBuilder Thread-unsicher ist; die grundlegenden Operationen von beiden sind gleich
2. Quellcodeanalyse
// String和StringBuffer的操作对应底层源码操作
String str = new String(); // char[] value = new char[0];
String str1 = new String("abc"); // char[] value = new char[]{'a','b','c'};
StringBuffer sb1 = new StringBuffer(); // char[] value = new char[16];
StringBuffer sb2 = new StringBuffer("abc"); // char[] value = new char["abc".length()+16];
System.out.println(sb1.length()); // 0
sb1.append("a"); // value[0] = 'a';
sb2.append('b'); // value[sb2.length()] = 'b';
3. StringBuffer-Methode
3.1 StringBuffer append (xxx): Bietet viele append()-Methoden für die String-Verkettung
StringBuffer sb1 = new StringBuffer("abc");
sb1.append('a');
sb1.append(3);
sb1.append("def");
System.out.println(sb1);
Sie können Daten auf beliebige Weise hinzufügen, siehe den Konstruktor für Details:
3.2 StringBuffer delete (int start, int end): löscht den Inhalt an der angegebenen Stelle
StringBuffer sb1 = new StringBuffer("abca3def");
sb1.delete(2, 4);
System.out.println(sb1);
Ausgabe:
ab3def
3.3 StringBuffer replace (int start, int end, String str): Ersetze die Position [start, end] durch str
StringBuffer sb1 = new StringBuffer("ab3def");
sb1.replace(2, 4, "123");
System.out.println(sb1);
ab123ef
3.4 StringBuffer insert (int offset, xxx): Fügt xxx an der angegebenen Position ein
StringBuffer sb1 = new StringBuffer("ab123ef");
sb1.insert(0, 2.3);
System.out.println(sb1);
2.3ab123ef
3.5 StringBuffer reverse (): Kehrt die aktuelle Zeichenfolge um
StringBuffer sb1 = new StringBuffer("2.3ab123ef");
sb1.reverse();
System.out.println(sb1);
fe321ba3.2
3.6 StringBuffer enthält auch String-Methoden
- public int indexOf (Zeichenfolge str)
- public String substring (int start,int end)
- öffentliche Ganzzahllänge()
- öffentliches Zeichen charAt(int n)
- public void setCharAt (int n ,char ch)
Einzelheiten finden Sie in der Erläuterung der Java-Klassenmethode String
4. Effizienzvergleich von String, StringBuffer und StringBuilder
public class StringBufferTest {
/**
* String StringBuffer StringBuilder效率对比
*
*/
@Test
public void test2() {
long startTime = 0L;
long endTime = 0L;
String str = "";
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
str += i;
}
endTime = System.currentTimeMillis();
System.out.println("String执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
buffer.append(i);
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
builder.append(i);
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder执行时间:" + (endTime - startTime));
}
}
String-Ausführungszeit: 3603
StringBuffer-Ausführungszeit: 6
StringBuilder-Ausführungszeit: 3