为什么构造函数歧义仅适用于Wrapper类

时间:2014-02-27 06:44:55

标签: java

当我试图生成构造函数模糊时,我发现当我使用原始类型时,eclipse不会给我带来错误。但是,当我使用包装类时,它会抛出错误。

public class SubClass {

    public SubClass(Integer i) {

        System.out.println(i);
    }

    public SubClass(String str) {
        System.out.println(str);
    }
}

如果我使用int而不是Integer,这是一个包装类,那么构造函数模糊错误就会消失。然后它调用带有String类型参数的构造函数。

请你详细说明一下。

感谢。

3 个答案:

答案 0 :(得分:1)

因为在int的情况下它可以自动提交到Integer并选择正确的构造函数版本,所以没有从intString的直接路径所以它永远不是一个选项

如果null两个构造函数都符合条件,那么歧义

答案 1 :(得分:0)

由于原始数据类型无法使用null值进行分配,因此它解析了构造函数,表示使用了SubClass(Stirng xx)而不是SubClass(int a)

如果构造函数采用的对象可以为整数赋值为null,则无法解析构造函数。

所以它会引发错误。

要添加答案,

int a = null; // gives compilation issue
Integer a = null;; // no compilation issue

Integer a = null;
int x = a; // throws null pointer exception at runtime.

仅查看运行时。

答案 2 :(得分:0)

public SubClass(Object obj) {
    System.out.println(obj);
}

public SubClass(String str) { System.out.println(str); }

如果我将Integer替换为Object,那为什么不出现模棱两可的问题。