2012-04-12 27 views
1

Mögliche Duplizieren:
Concatenating null strings in JavaJava String-Verkettung - nulls

Ich frage mich nur, wenn jemand erklären kann, warum der folgende Code die Art und Weise funktioniert es tut:

String a = null; 
String b = null; 
String c = a + b; 
System.out.println(c.toString()); 

Dies druckt "Nullnull" auf der Konsole.

Ich war irgendwie erwartet, dass die Operation + würde eine Ausnahme oder in geringerem Maße, dass "c" wäre null geworfen.

Antwort

2

„String-Konvertierung,“ durch den Verkettungsoperator erforderlich, schreibt vor, dass Nullwerte den vier Zeichen null zugeordnet werden sollen, wenn eine Zeichenfolgendarstellung benötigt wird.

Spec für String-Konvertierung: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.11

Spec für String-Verkettung: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18.1

+0

Danke für die Antwort, perfekt. Ich habe dafür gestimmt, die Frage zu beenden, da ein Duplikat gefunden wurde, ansonsten wäre Ihre Antwort die Antwort, die ich akzeptieren würde – Tiago

9

weil dieser Code zu

kompiliert
String c = new StringBuilder().append(a).append(b).toString(); 

und StringBuilder.append(a) anhängt das Ergebnis String.valueof(a) which is "null" if a is null

+0

In diesem speziellen Fall sind Sie richtig. Im allgemeineren Fall jedoch, wenn Nullstrings gedruckt werden: http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html#print%28java.lang.String%29 & http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.11 –

+0

Es ist nicht korrekt, in meinem Fall wird diese Zeile in 'String c = new StringBuilder (String .valueOf (a)). append (b) .toString(); '. Der wahre Grund ist die 'String.valueOf (Object)' Implementierung. – dash1e

+0

@ dash1e es hängt von der Implementierung wirklich neben 'append (null)' muss auch "null" anfügen –

0

Wenn Java eine null Referenz während der String-Verkettung wandeln es in der Zeichenfolge "null" finden. So ist "nullnull" das richtige Ergebnis.

Bevor Verkettung für jedes Objekt Java Aufruf

java.lang.String.valueOf(Object) 

und wenn Sie auf den Quellcode dieser Methode sehen Sie diese

public static String valueOf(Object obj) { 
    return (obj == null) ? "null" : obj.toString(); 
} 
Verwandte Themen