public class App {
public static void main(String[] args) {
ConTest conTest = new ConTest(null);
}
Run Code Online (Sandbox Code Playgroud)
POJO:
public class ConTest {
private String a;
private Object b;
public ConTest(Object b) {
System.out.println("Object" + b);
}
public ConTest(String a) {
System.out.println("String :" + a);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,它总是调用带有String参数的构造函数.为什么?
null 可以传递给两个构造函数.
但是,String参数比参数更具体Object(因为String它是子类Object),并且重载解析过程的方法更倾向于使用更具体的参数类型的方法(或您的情况下的构造函数).
如评论中所述,如果要强制调用接受的构造函数,Object可以将其转换null为Object:
ConTest conTest = new ConTest((Object)null);
Run Code Online (Sandbox Code Playgroud)