gpt4 book ai didi

java - 使用可变参数的方法重载

转载 作者:搜寻专家 更新时间:2023-11-01 01:08:00 26 4
gpt4 key购买 nike

我认为这是一个有点愚蠢的问题,但我不确定为什么会这样。

代码;

public class OverloadingTest {
public static int sum(int ...a){
int sum=0;
for(int i : a){
sum += i;
}
System.out.print("this is variant args//");
return sum;
}

public static double sum(double a, double b) {
return a + b;
}

public static void main(String[] args) {
System.out.println(sum(1.5, 2.5));
System.out.println(sum(10, 20));
System.out.println(sum(10, 20,30));
}
}

我预期的结果;

4.0
this is variant args//30
this is variant args//60

控制台中的实际结果:

4.0
30.0
this is variant args//60

我不确定为什么 sum(10, 20) 的结果是 30.0,而不是变量参数的 30。

最佳答案

这是因为编译器总是选择使用最具体的方法。

由于您的第二次调用有两个参数,并且 int 可以转换为 double 而不会损失精度(请参阅 JLS, section 5.1.2 ),编译器选择调用你的双参数方法。

IDE 会在此处警告您有关隐式 intdouble 的转换。


编辑:正如@OlegEterkhin 在评论中提到的那样,请参阅 JLS, section 15.2.2供编译器选择使用哪种方法的过程。

不,这行不通:

int x = sum(10, 20);

关于java - 使用可变参数的方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22930654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com