虽然除去了我认为是不必要的代码整理我的项目,我删除了形式我删除了必要的构造,但它仍然编译和运行
public MyClass(int a, int b)
的构造在保持其他构造
public MyClass(double c, double d)
有到INT打电话,int构造,我没有注意到,但它编译和运行,但调用的双重,双版本,挺正常引起我写抛出一个异常处理程序。 MyClass不扩展任何其他类。
Java通过什么规则导致这种不可见的自动转换发生?
虽然除去了我认为是不必要的代码整理我的项目,我删除了形式我删除了必要的构造,但它仍然编译和运行
public MyClass(int a, int b)
的构造在保持其他构造
public MyClass(double c, double d)
有到INT打电话,int构造,我没有注意到,但它编译和运行,但调用的双重,双版本,挺正常引起我写抛出一个异常处理程序。 MyClass不扩展任何其他类。
Java通过什么规则导致这种不可见的自动转换发生?
当然,你是对的。不知何故,我在脑海中认为它不适用于我认为更严格的类型检查的构造函数 - 显然不是! – NickT 2011-05-07 13:58:11
这是一个Widening Primitive Conversion。由于您可以在不丢失任何信息的情况下将int
转换为double
,因此Java语言无形地执行此操作。
的方法重载,最具体的方法被调用,所以如果你有foo(int, int)
和foo(double, double)
和你打电话foo(1,2)
然后foo (int, int)
将被调用。但是因为1,2也可能是双打的,如果你没有foo(int, int)
,则会调用foo(double, double)
。
,因为一个'int'值可以分配给一个'double'变量。 – asgs 2011-05-07 13:50:50