Hi, wieso ist die 2e Variante effizienter als die erste? Beim ersten Beispiel wird jedes mal neues Objekt in der Schleife erzeugt, was natürlich “viel” Geschwindigkeit kostet. Wird beim 2en Beispiel kein neues Objekt erzeugt?
Danke
for(int i = 0; i < 5000; i++)
s = s + "*";```
```String s = "*";
StringBuffer tmp = new StringBuffer (s);
for(int i = 0; i < 5000; i++)
tmp.append("*");
s =tmp.toString();```
Also wird beim StringBuffer/Builder kein neues Objekt erzeugt, sondern das Objekt selbst jedes mal verändert? Bei Strings ist das ja nicht möglich, da man String nicht verändern kann.
PS: an diesem Beispiel kann man die Geschwindigkeit testen.
public class TestString
{
public static void main (String[] args){
String s = "Hello";
System.out.println ("Starte Schleife, Bitte warten ...");
long startTime = System.currentTimeMillis();
for (int n = 0; n < 10000; n++){
s += "World";
}
long endTime = System.currentTimeMillis();
System.out.println ("Mit dem + Operator braucht man hier " +
(endTime-startTime) + " Millisekunden");
System.out.println ("Der zusammengesetzte String hat eine " +
"Länge von " + s.length () + " Zeichen");
System.out.println ("Starte Schleife2, Bitte warten ...");
long startTime2 = System.currentTimeMillis();
s = "Hello";
StringBuffer sb = new StringBuffer("Hello");
for (int n = 0; n < 10000; n++){
sb.append(s);
}
long endTime2 = System.currentTimeMillis();
System.out.println ("Mit der append() Methode braucht man hier " +
(endTime2-startTime2) + " Millisekunden");
System.out.println ("Der zusammengesetzte String hat eine " +
"Länge von " + sb.length () + " Zeichen");
}
}```
Ausgabe:
Starte Schleife, Bitte warten …
Mit dem + Operator braucht man hier 986 Millisekunden
Der zusammengesetzte String hat eine Länge von 50005 Zeichen
Starte Schleife2, Bitte warten …
Mit der append() Methode braucht man hier 2 Millisekunden
Der zusammengesetzte String hat eine Länge von 50005 Zeichen