当我试图生成构造函数模糊时,我发现当我使用原始类型时,eclipse不会给我带来错误。但是,当我使用包装类时,它会抛出错误。
public class SubClass {
public SubClass(Integer i) {
System.out.println(i);
}
public SubClass(String str) {
System.out.println(str);
}
}
如果我使用int而不是Integer,这是一个包装类,那么构造函数模糊错误就会消失。然后它调用带有String类型参数的构造函数。
请你详细说明一下。
感谢。
答案 0 :(得分:1)
因为在int
的情况下它可以自动提交到Integer并选择正确的构造函数版本,所以没有从int
到String
的直接路径所以它永远不是一个选项
如果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,那为什么不出现模棱两可的问题。