字符串与对象类型构造函数

Ank*_*jan 1 java

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参数的构造函数.为什么?

Era*_*ran 5

null 可以传递给两个构造函数.

但是,String参数比参数更具体Object(因为String它是子类Object),并且重载解析过程的方法更倾向于使用更具体的参数类型的方法(或您的情况下的构造函数).

如评论中所述,如果要强制调用接受的构造函数,Object可以将其转换null为Object:

ConTest conTest = new ConTest((Object)null);
Run Code Online (Sandbox Code Playgroud)