同學在群問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中看到解釋還以為是選擇更特殊的,感覺很別扭,原來是自己英文太次了 。。。