Java 下面程序的输出是1,3,3,有人能解释一下它是如何输出的吗?
下面程序的输出是1,3,3,有人能解释一下它是如何输出的吗? 它会考虑10.25作为方法参数的对象吗?Java 下面程序的输出是1,3,3,有人能解释一下它是如何输出的吗?,java,Java,下面程序的输出是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.print
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"));
}
}
不认为10.25是一个对象。它认为它是可转换为对象引用的赋值,通过装箱转换为双引用,然后加宽引用转换。
t.methodOfTest(10);
10被解释为int
literal,因此调用methodOfTest(inti)
t.methodOfTest(10.25);
没有一种方法是双精度的,因此唯一适合10.25
的方法是methodOfTest(Object o)
这里我们有一个Double
对象,但同样,没有找到采用Double
的方法,因此唯一采用该方法的方法还是methodOfTest(对象o)
因此,您的输出是
1,3,3
,因为10.25可以转换为双精度。(拳击双打)
因此,将以10.25作为参数调用Double的构造函数,并将其传递给方法:void methodOfTest(Object o)。装箱答案绝对正确
我只是想补充一点:您可能期望从Double到Integer的自动(隐式)转换,但这种转换必须显式声明(将Double转换为Integer)
在没有显式转换的情况下,Double值被解释为对象(因为您提供了方法重载),它是所有内容的基类
希望这有帮助;)“为什么它会把10.25当作一个对象”,因为它不是<代码> int >代码>或<代码>整数< /代码>。谢谢亚历克斯的额外信息!
t.methodOfTest(new Double("25.25"));