我们说我有两种方法:
1 public int sum(int a, int b) { return a + b; }
2 public double sum(double a, double b) { return a + b; }
如果我打电话给总和,就像这样:sum(2, 3)
第一个方法将被执行
如果我调用sum,就像这样:sum(2.5,3.5)
执行第二种方法
但是,如果我这样调用sum:sum(2.5,3)
,则执行第二种方法,但不执行第一种方法,为什么会这样?
另外,如果sum这样调用也会出现这种情况:sum(3,2.5)
?
答案 0 :(得分:4)
编译器会将int变为double,调用第二个方法因为,int可以被类型化为double,但反之亦然。
这将适用于右侧的所有原始类型。 你不能向左移动,除非你明确地进行类型转换,你没有这样做。如果你想要执行第一个方法,你可以将类型转换为int,这样它就不会不会扩大到双倍。 Java对这些事情非常具体:
总而言之,当你调用方法而没有对int进行类型转换时,这样做:
sum(int, double);
实际上是转换为:
sum(double, double);
要避免这种情况,必须将int作为int进行类型转换。
答案 1 :(得分:2)
因为,整数可以在Math中作为浮点数字。
所以,sum(3,2.5)
- 这里值得方法签名是sum(double, double)
!