根据文档,方法 String.valueOf(Object obj)
返回:
如果参数是
null
,则字符串等于"null"
;否则,返回obj.toString()
的值。
但是当我尝试这样做时怎么会:
System.out.println("String.valueOf(null) = " + String.valueOf(null));
它会抛出 NPE 吗? (不信自己试试看!)
线程“main”中的异常 java.lang.NullPointerException
在 java.lang.String.(未知来源)
在 java.lang.String.valueOf(未知来源)
为什么会这样?文档是在骗我吗?这是 Java 中的主要错误吗?
原文由 user282886 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是
String.valueOf
方法 _重载_:String.valueOf(Object)
String.valueOf(char[])
Java 规范语言要求在这些情况下,选择 _最具体的重载_:
JLS 15.12.2.5 选择最具体的方法
A
char[]
is-anObject
, but not allObject
is-achar[]
.因此,char[]
比Object
_更具体_,并且根据 Java 语言的规定,在这种情况下选择了String.valueOf(char[])
重载。String.valueOf(char[])
expects the array to be non-null
, and sincenull
is given in this case, it then throwsNullPointerException
.简单的“修复”是将
null
显式转换为Object
如下:相关问题
故事的道德启示
有几个重要的:
valueOf(char[])
重载!null
(示例如下)也可以看看
关于铸造
null
至少有两种情况需要将
null
显式转换为特定的引用类型:null
作为可变参数参数的单个参数后者的一个简单示例如下:
然后,我们可以有以下内容:
也可以看看
相关问题