从String.valueOf(null)说起

    xiaoxiao2021-03-25  119

    同学在群问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中看到解释还以为是选择更特殊的,感觉很别扭,原来是自己英文太次了 。。。

    转载请注明原文地址: https://ju.6miu.com/read-15589.html

    最新回复(0)