方法Overloading和null參數選擇
考慮以下代碼段:){ MoneyCalc問題= new MoneyCalc(); Question.Method(null); } } [
為什麼將null值傳遞到Overloaded方法方法調用方法(string)版本?null是一個特殊的常數值,該值代表一個對象。它不是任何特定類型的值,但是可以將其分配給任何參考類型的變量,包括對象和字符串。
當方法調用以null作為參數作為參數,編譯器選擇方法(字符串)版本,因為它比方法(對象)版本更具體。根據Java語言規範(JLS),根據其適用性和特異性選擇了最具體的過載。的適用性是指在沒有編譯時錯誤的情況下是否可以將參數傳遞給該方法。在這種情況下,null適用於這兩種方法,因為它可以分配給對象和字符串類型的變量。
public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }因此,編譯器選擇方法(string)版本為其更具體且適用於提供的參數,該參數是null引用。 MoneyCalc類,將發生彙編錯誤。這是因為在這種情況下,方法(字符串)或方法(StringBuffer)都不會比其他方法更具體,從而導致方法選擇中的歧義。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3