以下程序的输出是1,3,3可以有人解释一下吗? 它会将10.25视为方法参数的对象吗?
public class Test {
void methodOfTest(int i) {
System.out.println(1);
}
void methodOfTest(Integer I) {
System.out.println(2);
}
void methodOfTest(Object o) {
System.out.println(3);
}
public static void main(String[] args) {
Test t = new Test();
t.methodOfTest(10);
t.methodOfTest(10.25);
t.methodOfTest(new Double("25.25"));
}
}
答案 0 :(得分:7)
t.methodOfTest(10);
10被解释为int
字面值,因此methodOfTest(int i)
被称为
t.methodOfTest(10.25);
没有方法需要double
,因此10.25
适合的唯一方法是methodOfTest(Object o)
t.methodOfTest(new Double("25.25"));
此处我们有一个Double
对象,但同样没有找到带Double
的方法,所以唯一采用此方法的方法是methodOfTest(Object o)
。
因此您的输出为1,3,3
。
答案 1 :(得分:1)
它不认为10.25是一个对象。它确实将它赋值为可转换为Object引用,方法是将转换转换为Double引用,然后加宽引用转换。
答案 2 :(得分:0)
拳击答案绝对正确。
我只是想补充一点:你可能期望从Double到Integer的自动(隐式)转换,但必须明确声明这种转换(将Double转换为Integer)。
如果没有显式转换,您的Double值将被解释为Object(因为您提供了该方法重载),它是关于所有内容的基类。
希望这会有所帮助;)
答案 3 :(得分:-1)
因为10.25可以转换为Double。 (拳击成双) 所以Double的构造函数将以10.25作为参数调用,并将传递给方法:void methodOfTest(Object o)。