Heim >Java >javaLernprogramm >Analyse des Unterschieds zwischen StringBuffer und String in JAVA
Ich habe gesehen, dass diese Erklärung gut ist, also habe ich sie übertragen
Es gibt drei Klassen in Java, die für Zeichenoperationen verantwortlich sind.
1.Character arbeitet mit einem einzelnen Zeichen,
2.String arbeitet mit einer Zeichenfolge, unveränderliche Klasse.
3.StringBuffer arbeitet auch mit einer Zeichenfolge und ist eine Variablenklasse.
String:
ist ein Objekt, kein primitiver Typ.
ist ein unveränderliches Objekt. Sobald es erstellt wurde, kann sein Wert nicht geändert werden.
Änderungen an vorhandenen String-Objekten sind alle neu Erstellen Sie ein neues Objekt und speichern Sie den neuen Wert darin.
String ist eine endgültige Klasse, das heißt, sie kann nicht vererbt werden.
StringBuffer:
ist ein veränderbares Objekt Objekt wird nicht wie String neu erstellt
Es kann nur über den Konstruktor erstellt werden,
StringBuffer sb = new StringBuffer();
Hinweis: Es kann nicht über das Zuweisungssymbol
sb bezahlt werden = "Willkommen hier!"; //Nachdem das Fehlerobjekt erstellt wurde, wird Speicherplatz im Speicher zugewiesen und zunächst ein Nullwert gespeichert. Wenn Sie StringBuffer einen Wert zuweisen, können Sie dessen append() verwenden. Methode.
sb.append("hello");
str += "here"; Die Verarbeitungsschritte von
bestehen tatsächlich darin, einen StringBuffer zu erstellen, dann append() aufzurufen und schließlich
StringBuffer inSting();
umzuwandeln. Auf diese Weise wird die String-Verbindung hergestellt Operation ist Es gibt einige zusätzliche Operationen als StringBuffer, aber natürlich ist die Effizienz beeinträchtigt.
Auf diese Weise ist das ursprüngliche Objekt nutzlos und wird im Müll gesammelt.
Fügen Sie 5000 Mal wiederholt 26 englische Buchstaben hinzu 🎜>
Leider ist mein Computer kein Supercomputer und das Ergebnis, das ich erhalte, ist nicht unbedingt jedes Mal das gleiche, normalerweise etwa 46687.
String tempstr = "abcdefghijklmnopqrstuvwxyz"; int times = 5000; long lstart1 = System.currentTimeMillis(); String str = ""; for (int i = 0; i < times; i++) { str += tempstr; } long lend1 = System.currentTimeMillis(); long time = (lend1 - lstart1); System.out.println(time);
String tempstr = "abcdefghijklmnopqrstuvwxyz"; int times = 5000; long lstart2 = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < times; i++) { sb.append(tempstr); } long lend2 = System.currentTimeMillis(); long time2 = (lend2 - lstart2); System.out.println(time2);Die Schlussfolgerung liegt also auf der Hand: StringBuffer ist fast Zehntausende Mal schneller als String. Natürlich sind diese Daten nicht sehr genau. Denn bei einer Zyklenzahl von 100.000 ist der Unterschied noch größer. Wenn Sie mir nicht glauben, versuchen Sie es
Wenn Sie immer noch nicht verstehen:
1) Der Unterschied zwischen der Union +-Methode von String und dem Anhängen von StringBuff Methode:
Wenn der +-Operator von String String-Operationen ausführt, konvertiert er zunächst das aktuelle String-Objekt in den StringBuff-Typ, ruft seine Append-Methode auf und konvertiert schließlich das generierte StringBuff-Objekt über seine toString-Methode in einen String-Typ-String. Daher ist seine Effizienz geringer.
Aber im Hinblick auf die Lesbarkeit ist der Verbindungsoperator von String immer noch besser.
2) StringBuff ist Thread-sicher
String ist Thread-unsicher
3) String ist ein String-Objekt, das nicht geändert werden kann, aber StringBuff kann geändert werden.
Weitere Artikel zur Analyse des Unterschieds zwischen StringBuffer und String in JAVA finden Sie auf der chinesischen PHP-Website!public static boolean fileCopy(String srcStr, String destStr) { File srcFile = null; File destFile = null; Reader reader = null; Writer writer = null; boolean flag = false; try { srcFile = new File(srcStr); if (!srcFile.exists()) { System.out.println(“源文件不存在”); System.exit(0); } else { reader = new FileReader(srcFile); } destFile = new File(destStr); writer = new FileWriter(destFile); char[] buff = new char[1024]; int len; String str = “”; StringBuffer sbuff = new StringBuffer(); while ((len = reader.read(buff)) != -1) { // str += new String(buff, 0, len); sbuff.append(new String(buff,0,len)); } // writer.write(str.toCharArray()); writer.write(sbuff.toString().toCharArray()); flag = true; writer.flush(); reader.close(); writer.close(); } catch (IOException e) { System.out.println(“文件拷贝异常:= ” + e.getMessage()); } return flag; }