Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下面程序的输出是1,3,3,有人能解释一下它是如何输出的吗?_Java - Fatal编程技术网

Java 下面程序的输出是1,3,3,有人能解释一下它是如何输出的吗?

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

下面程序的输出是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"));
  }
}

不认为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值被解释为对象(因为您提供了方法重载),它是所有内容的基类


希望这有帮助;) int >代码>或<代码>整数< /代码>。谢谢亚历克斯的额外信息!
t.methodOfTest(new Double("25.25"));