Java方法重载 - 方法的输入参数是double和double,Passed参数是int和double

时间:2015-09-03 20:35:10

标签: java methods override

我是Java的新手并且正在尝试学习方法覆盖。 当我执行以下操作时,输出为-35。有人可以解释一下吗?

public static void f(int a, int b) {

    System.out.println(a + b);
}

public static void f(double a, double b) {

    System.out.println(a - b);
}

public static void main(String[] args) {

    int i = 19;
    double x = 54.0;

    f(i, x); 
}

输出:
-35

2 个答案:

答案 0 :(得分:2)

Java选择最具体的适用类型。在这种情况下,f(int,int)不适用。

它选择f(double,double),因为两个参数都可以转换为double,但两个参数都不能转换为int而不会丢失。如果f(double,double)不存在,则f(int,int)仍然无法在没有强制转换的情况下使用。

规格中的更多信息: https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2

答案 1 :(得分:1)

正在调用带有double参数的方法,因为double优先于int。这是因为int可以分配给double,但不是相反。

例如:

int a = 0;
double b = 0;
b = a; // Okay
a = b; // error

所谓使用f(int a, int b)double调用int会导致错误,而调用f(double a, double b)则不会,因为int只会被投放到double