虽然通过删除我认为不必要的代码来整理我的项目,但我删除了表单的构造函数
public MyClass(int a, int b)
留下其他构造函数
public MyClass(double c, double d)
调用了int,int构造函数,我没有注意到,但它编译并运行但调用了double,double版本,非常正确地导致我写入的异常处理程序被抛出。 MyClass不会扩展任何其他类。
Java会导致这种不可见的自动转换发生什么规则?
答案 0 :(得分:6)
答案 1 :(得分:3)
这是Widening Primitive Conversion。由于您可以将int
转换为double
而不会丢失任何信息,因此Java语言无形地执行此操作。
答案 2 :(得分:1)
在方法重载中,会调用最具体的方法,因此如果您有foo(int, int)
和foo(double, double)
并且调用foo(1,2)
,则会调用foo (int, int)
。但由于1,2可能也会增加一倍,如果你没有foo(int, int)
,foo(double, double)
将被调用。