<pre name="code" class="java">public class Confusing {
private Confusing(Object o){
System.out.println("Object");
}
private Confusing(Double[] dArray){
System.out.println("double array");
}
public static void main(String[] args){
new Confusing(null);
}
}
打印结果为double array。
Java的重载解析过程是分两个阶段运行的,第一个阶段选取所有可获得并且可应用的方法或构造器;第二阶段在第一阶段选取的方法或构造器中选取最精确的一个。
如果一个方法或构造器可以接受传递给另一个方法或构造器的任何参数,那么第一个方法比第二个方法缺乏精确性。
要想null参数调用Confusing(Object o),可以修改为new Confusing((Object) null);