我有以下代碼:
這段java代碼的解釋是什麼?
public class Main {
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
Main question = new Main();
question.method(null);//1
}
}
爲什麼結果是「字符串版本」?以及爲什麼如果第一個方法需要StringBuffer
對象時會出現編譯器錯誤?
另一種情況:如果第一種方法需要StringBuffer
對象,而我寫入question.method("word");
,則結果將爲「字符串版本」。爲什麼?爲什麼沒有編譯器錯誤?
好奇。我期望編譯器在那裏發牢騷,但也許兩個參數類之間存在一種類型關係(「String」是更具體的)會改變事情,這是JLS中的情況嗎? 'StringBuffer'的情況很簡單,因爲它確實含糊不清。 – 2010-06-13 19:42:03
@第三個問題:當然你不會得到一個錯誤。你傳遞一個字符串,所以帶有String參數的方法顯然會被調用。編譯器沒有什麼可以混淆的。 – someguy 2010-06-13 20:07:52