Kleine Verständnisfrage zu Stringbuffer

Status
Nicht offen für weitere Antworten.

Troilus

Mitglied
Huhu,
ich hätte eine kleine Verständnisfrage zum Einsatz von Stringbuffern:

Ich habe bis jetzt immer folgende Syntax bei Ausgaben auf einem Out Stream genutzt:

Code:
...
out.println("<rect x=\""+x+"\" y=\""+y+"\" width=\""+width+"\" height=\""+height+"\" fill=\"none\" stroke=\"black\" />");
...


Implizit wird ja hier durch das + der Stringbuffer.append(String).append(x).append(String).append(y).... aufgerufen.

Bringt es Vorteile in der Perfomance bzw. ist es sauberer Code wenn ich diese Implementierung nutze?:


Code:
StringBuffer tempStringB = new StringBuffer();
        
tempStringB.append("<rect x=\"");
tempStringB.append(x);
tempStringB.append("\" y=\"");
tempStringB.append(y);
tempStringB.append("width=\"");
tempStringB.append(width);
tempStringB.append("\" height=\"");
tempStringB.append(height);
tempStringB.append("\" fill=\"none\" stroke=\"black\" />");
        
out.println(tempStringB.toString());

Oder ist die "Qualität" (ka wie ich es sonst nennen könnte) des Quellcodes gleich?

Gruß
 
Hi Frog,

Performancemäßig ist es ein und dasselbe, wie du
ja auch selbst schon richtig erkannt hast.
Der Compiler setzt beide Varianten in Byte-Code um,
dieser ist nachher in beiden Fällen identisch.

Ich finde die erste Variante vom Programmierstil
besser, weil man alles in einer Zeile hat,
das ist aber Ansichtssache, was man schöner
oder übersichtlicher findet.

Gruß
YF
 
Also, das ist Schwachsinn, das er einen StringBuffer.append macht...


Bsp
OriginalSource::
Code:
public class Outputtest
{
    public Outputtest()
    {
        int x = 3;
        double c = 29.999;
        float b = 4;
        System.out.println("bla" + x + "blubb" + "xx" + c + "fut" + b);
    }

    public static void main(String args[])
    {
        new Outputtest();
    }
}



Decompiled:::
Code:
import java.io.PrintStream;

public class Outputtest
{

    public Outputtest()
    {
        byte byte0 = 3;
        double d = 29.998999999999999D;
        float f = 4F;
        System.out.println("bla" + byte0 + "blubb" + "xx" + d + "fut" + f);
    }

    public static void main(String args[])
    {
        new Outputtest();
    }
}


Das wird nicht mit einem append gemacht, sondern immer ein neues String Objekt angelegt und dazugehängt....

Jedenfalls ist ein String + langsam und sollte nie gemacht werden!! (dort wo es halt nach Performance geht)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben