我有以下代码:
这段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