[Erledigt] Verkettung von Strings

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();```

Wo wird denn bei der zweiten ein neues Object erzeugt?

BTW StringBuilder ist nochmal schneller als StringBuffer, da ein StringBuilder nicht synchronisiert ist.

Das war auch meine Frage :wink:

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.

die antwort hast du selbst gegeben !

Oki, super, habe mir das auch so gedacht, war aber unsicher, deshalb habe ich nachgefragt :smiley:

Danke

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