我写了这个测试代码

public class ConstructorTestApplication {

    private static String result;


    public static void main(String[] args) {

        ConstructorTest test1 = new ConstructorTest(0);
        System.out.println(result);
    }

    private static class ConstructorTest {

        public ConstructorTest(double param){
            result = "double constructor called!";
        }
        public ConstructorTest(float param) {
            result = "float constructor called!";
        }


    }
}

结果是
float constructor called!

为什么调用float构造函数而不是double构造函数?这是动态方法查找的一部分吗?

最佳答案

ConstructorTest(float param)是这两个构造函数中最具体的方法,因为带有double参数的方法可以接受任何float值,但事实并非如此。

JLS 15.12.2.5:

09-12 12:29