假设我有 2 个这样的方法:
1 public int sum(int a, int b) { return a + b; }
2 public double sum(double a, double b) { return a + b; }
如果我调用 sum,像这样:sum(2, 3)
第一个方法会被执行
如果我调用 sum,像这样:sum(2.5,3.5)
执行第二个方法
但是,如果我这样调用 sum:sum(2.5,3)
,会执行第二个方法,但不会执行第一个方法,这是为什么?
此外,如果这样调用 sum 是否也会出现这种情况:sum(3,2.5)
?
最佳答案
编译器会将 int 转换为 double,调用第二个方法 这是因为,int 可以类型转换为 double,但反之则不行。
这将适用于右侧的所有原始类型。 你不能向左移动,除非你显式地进行类型转换,而你并没有这样做。如果你想执行第一个方法,你可以将类型转换为一个 int,这样它就不会执行'扩大成双。 Java 对这些事情非常具体:
因此,总而言之,当您调用方法而不对 int 进行类型转换时,这样做:
sum(int, double);
实际上是这样翻译的:
sum(double, double);
为避免这种情况,您必须将 int 类型转换为 int。
关于java - Java中的重载方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235850/