构造函数重载 java

Constructor overloading java

Java如何决定在下面的程序中调用哪个构造函数?

public class Test   
{  
    Test(int a, int b)  
    {  
        System.out.println("a = "+a+" b = "+b);  
    }  
    Test(int a, float b)  
    {  
        System.out.println("a = "+a+" b = "+b);  
    }  
    public static void main (String args[])  
    {  
        byte a = 10;   
        byte b = 15;  
        Test test = new Test(a,b);  
    }  
}  

调用了第一个以第二个参数为int的构造函数,但是如果我删除了第一个构造函数,则调用了另一个构造函数。如果两个构造函数都存在,为什么调用第一个?

在第一种情况下,两个 byte 个参数都扩展为 int,这比将一个参数转换为 float 更可取。

在第二种情况下,没有构造函数占用两个 int,因此唯一可能的选择涉及转换。

语言定义文档包含对构造函数解析的详尽讨论。