根据文档,该方法String.valueOf(Object obj)返回:
如果参数是
null,那么一个字符串等于"null"; 否则,obj.toString()返回值.
但是当我尝试这样做时怎么样:
System.out.println("String.valueOf(null) = " + String.valueOf(null));
Run Code Online (Sandbox Code Playgroud)
它会引发NPE而不是?(如果你不相信,请亲自尝试!)
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
怎么会发生这种情况?文档对我说谎吗?这是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
Run Code Online (Sandbox Code Playgroud)
第一个问题是:为什么会发生这种意想不到的行为?
这意味着像这样的方便代码:
String age = person.getAge() + "";
Run Code Online (Sandbox Code Playgroud)
是完全出乎意料的。
第二个问题:获得 null 而不是“null”的最佳(最优雅)方法是什么