考虑以下两个陈述
Integer integer = new Integer(null);
String string = new String(null);
第二个出现编译错误
Cannot resolve constructor `String(null)`
现在Integer和String都有接受String
的构造函数。那么字符串如何给出编译错误而不是整数错误。
拨打第一个电话
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
所以我期待字符串1也调用
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
我无法理解它是如何发生的,并且编译器被强制编译错误,而不是其他错误。
答案 0 :(得分:7)
String string = new String(null);
给我一个不同的错误。
这是一个含糊不清的调用,因为public String(char value[])
和public String(String original)
构造函数都匹配。
您可以尝试:
String string = new String((String) null);
或
String string = new String((char[]) null);
解决歧义。
另一方面,Integer
类只有一个构造函数只接受一个引用类型 - public Integer(String s)
- 所以没有歧义。
答案 1 :(得分:6)
问题是,具体来说,对new String(null)
的调用是不明确的,这意味着有多个可能的匹配构造函数,因此编译器无法决定您要调用哪个。
...这正是标准的Oracle java编译器已经告诉你的内容:
Test.java:5: error: reference to String is ambiguous
new String(null);
^
both constructor String(StringBuffer) in String and constructor String(StringBuilder) in String match
1 error
答案 2 :(得分:3)
如果String string = new String(null);
存在歧义错误。此构造函数不明确