Java中null到string的转换

Con*_*ant 5 java string null

今天我在遗留代码中发现了一个错误,这让我有了一个令人震惊的发现:

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
Run Code Online (Sandbox Code Playgroud)

第一个问题是:为什么会发生这种意想不到的行为?
这意味着像这样的方便代码:

String age = person.getAge() + "";
Run Code Online (Sandbox Code Playgroud)

是完全出乎意料的。
第二个问题:获得 null 而不是“null”的最佳(最优雅)方法是什么

Era*_*ran 3

String.valueOf(null)public static String valueOf(char data[])由于方法重载解析规则而进行的调用(char[]比 更具体Object)。该方法抛出NullPointException一个null参数。

String.valueOf(i)调用public static String valueOf(Object obj),它返回参数String的“null” null

为了避免这种异常,要么不调用s = String.valueOf(null);(您始终可以直接分配s = "null";,要么将值转换为除(例如)null之外的某种类型。char[]s = String.valueOf((String)null);