Java valueOf(null)调用构造函数valueOf(char[])的原因 为什么调用valueOf(char[]c),为什么不调用valueOf(Object o) ? 为什么String.valueOf(null)生成一个NullPointerException和 String.valueOf((Object)null)是否不产生任何异常

Java valueOf(null)调用构造函数valueOf(char[])的原因 为什么调用valueOf(char[]c),为什么不调用valueOf(Object o) ? 为什么String.valueOf(null)生成一个NullPointerException和 String.valueOf((Object)null)是否不产生任何异常,java,string,value-of,Java,String,Value Of,String.valueOf((Object)null)调用以下方法: publicstaticstringvalueof(objectobj){ 返回(obj==null)?“null”:obj.toString(); } 正如您所看到的,空案例是被管理的 String.valueOf(null)调用以下方法: 公共静态字符串值(字符数据[]){ 返回新字符串(数据); } 其本身称为: 公共字符串(字符值[]){ 这个偏移量=0; this.count=value.length;//只要

String.valueOf((Object)null)
调用以下方法:

publicstaticstringvalueof(objectobj){
返回(obj==null)?“null”:obj.toString();
}
正如您所看到的,空案例是被管理的

String.valueOf(null)
调用以下方法:

公共静态字符串值(字符数据[]){
返回新字符串(数据);
}
其本身称为:

公共字符串(字符值[]){
这个偏移量=0;

this.count=value.length;//只要有多个重载方法可能成为目标,就会使用最具体的方法

因此,如果您传入一个
char[]
,那么
valueOf(char[])
valueOf(Object)
是可能的,但是
valueOf(char[])
更具体。因此将调用该函数


现在
null
有点奇怪,因为它是每个非原语类型的合法值,所以它可以是这些方法中任何一个的参数。而且
valueOf(char[])
valueOf(Object)
更具体,因此将调用第一个值。

因为valueOf(char[]data)是null可以适应的第一个方法(因为数组是对象)。将调用最具体的方法。
null
不是对象,这使得
char[]c
更具体@ᴍ阿伦ᴍaroun
null
是一个与类型
Object
@MarkoTopolnik兼容的对象,我不明白。好吧,
null
不是一个对象,实际上是“缺席”对于Object.OP,对于您的2.,Javadoc引用会让您满意吗,还是您想打开JDK API设计人员的脑袋?很好的解释是什么,它并没有真正涵盖为什么这样做的推论是,若并没有单个最具体的重载(例如,若还有
valueOf(String))的话
-没有一个选项比所有其他选项更具体)那么您将得到一个编译错误。
String.valueOf(null);