2011-05-07 38 views
0

虽然除去了我认为是不必要的代码整理我的项目,我删除了形式我删除了必要的构造,但它仍然编译和运行

public MyClass(int a, int b) 

的构造在保持其他构造

public MyClass(double c, double d) 

有到INT打电话,int构造,我没有注意到,但它编译和运行,但调用的双重,双版本,挺正常引起我写抛出一个异常处理程序。 MyClass不扩展任何其他类。

Java通过什么规则导致这种不可见的自动转换发生?

+2

,因为一个'int'值可以分配给一个'double'变量。 – asgs 2011-05-07 13:50:50

回答

3

这是一个Widening Primitive Conversion。由于您可以在不丢失任何信息的情况下将int转换为double,因此Java语言无形地执行此操作。

1

的方法重载,最具体的方法被调用,所以如果你有foo(int, int)foo(double, double)和你打电话foo(1,2)然后foo (int, int)将被调用。但是因为1,2也可能是双打的,如果你没有foo(int, int),则会调用foo(double, double)

相关问题