2010-11-16 17 views

Antwort

22

Da Java den Ausdruck "A String" + x zu etwas entlang der Linien von "A String" + String.valueOf(x)

Tatsächlich wandelt ich denke, es StringBuilder s wahrscheinlich verwendet, so dass:

"A String " + x + " and another " + y 

der effizienteren löst

new StringBuilder("A String ") 
    .append(x) 
    .append(" and another ") 
    .append(y).toString() 

Dies verwendet die append Methoden für String Builder (für jeden Typ), die h andle null richtig

+0

IIRC, es trifft nicht wirklich 'String.valueOf (y)'. Es gibt Überladungen von 'StringBuilder.append' für jeden möglichen Typ, und' append (Object) 'behandelt den Nullwert direkt. Sie können das "Ich denke es wahrscheinlich" jedoch mit "es" ersetzen. –

+0

Ja - ich bin alt, skool, fürchte ich - von damals, als String-Verkettung unperformant war! –

+2

Ich habe gerade den Code für 'append (Object)' untersucht, und er delegiert tatsächlich an 'String.valueOf()'. * Inside * die Methode obwohl. Sie kochen also auf die gleichen Anrufe. –

7

Java verwendet StringBuilder.append(Object obj) hinter den Kulissen.

Es ist nicht schwer, sich die Implementierung vorzustellen.

public StringBuilder append(Object obj) 
{ 
    if (obj == null) 
    { 
     append("null"); 
    } 
    else 
    { 
     append(obj.toString()); 
    } 

    return this; 
} 
+0

Link zur Implementierung: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java#170 –

3

Der Code "" + null wird vom Compiler zu

new StringBuffer().append("").append(null); 

und String ersetzt null mit dem String "null" umgewandelt. Das Ergebnis ist also die Zeichenfolge "null".

+2

Nur eine kleine Korrektur; Es ist jetzt StringBuilder nicht StringBuffer. Die Fadensicherheit spielt bei der String-Verkettung keine Rolle (über die gesamte Lebensdauer des Builders hinaus). –

+0

Warum sollte/will man "" + "null" statt nur "null" schreiben? Ist dieses Beispiel nur für akademische Übungen? – user46874

+0

@ user46874: Ich denke, es muss ein Experiment gewesen sein, um zu sehen, wie Nullen gedruckt werden. –