从String.valueOf(null)说起

来源:互联网 发布:密室逃脱 网络宣传语 编辑:程序博客网 时间:2024/05/16 14:18

同学在群问String.valueOf(null)返回啥,我看了下源码,返回"null"啊,

    public static String valueOf(Object obj) {        return (obj == null) ? "null" : obj.toString();    }

结果当然是我too young了,报错了,因为用的是
 public static String valueOf(char data[]) {        return new String(data);    }
这就不得不说下java的重载了,我当时想这个问题有两点,第一是为什么不重载Object类型,第二是为什么重载给char[]而不是boolean,搜索一下有了答案,从后往前说,首先

null在重载的时候是不能重载给基础数据类型的,所以boolean,pass 掉了,然后剩下的就是Object和char[]了, 正常来想Object是更靠谱的选择啊,但是JLS 中是有规定的,

Java的重载解析过程是以两阶段运行的。第一阶段 选取所有可获得并且可应用的方法或构造器。第二阶段在第一阶段选取的方法或构造器中选取最精确的一个。如果一个方法或构造器可以接受传递给另一个方法或构 造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性[JLS 15.12.2.5]
英文原文中用的是special当初在stack overflow中看到解释还以为是选择更特殊的,感觉很别扭,原来是自己英文太次了 。。。再见


0 0
原创粉丝点击