2017-12-03 5 views
1

Heute habe ich einen Fehler in Legacy-Code, der mich führte zu einer schockierenden Entdeckung:Umwandlung von null auf Zeichenfolge in Java

String s = null + ""; //results in "null" string 
s = String.valueOf(null); // NullPointerException is thrown 
Integer i = null; 
s = String.valueOf(i); //results in "null" string 

erste Frage ist: Warum so ein unerwartetes Verhalten passiert?
Es bedeutet, dass ein bequemer Code wie folgt:

String age = person.getAge() + ""; 

völlig unerwartet wird.
Zweite Frage: Was ist die beste (elegant) Art und Weise ist eine Null anstelle von „null“

Antwort

3

String.valueOf(null) Anrufe public static String valueOf(char data[]) aufgrund Methode Überlastung Auflösungsregeln (char[] ist spezifischer als Object) zu erhalten. Diese Methode löst NullPointException für ein null Argument aus.

String.valueOf(i) nennt public static String valueOf(Object obj), die die String "null" für eine null Argument zurückgibt.

diese Ausnahme vermeiden, entweder nicht nennen s = String.valueOf(null); (Sie immer s = "null"; direkt zuordnen können, oder werfen den null Wert bis zu einem gewissen anderen Typ als char[] (zB s = String.valueOf((String)null);).

+0

Die Ausnahme stört mich weniger als ein Falscher Wert, der weitergegeben wird, wenn NULL erwartet wird, aber stattdessen "null" Zeichenkette erhält – Constant

+0

@Constant Stellen Sie in diesem Fall sicher, dass Sie niemals eine 'Null' an eine' Zeichenkette 'ketten und niemals 'Null' an' String übergeben. valueOf() '. – Eran

Verwandte Themen