请考虑以下两个陈述
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); }
所以我期待字符串一也打电话
public String(String original) { this.value = original.value; this.hash = original.hash; }
我无法理解这是如何发生的,并且编译器被迫在一个而不是其他的编译错误.
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)
- 因此没有歧义.
问题是,具体来说,调用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