请考虑以下两个陈述
Integer integer = new Integer(null);
String string = new String(null);
Run Code Online (Sandbox Code Playgroud)
第二个给出编译错误说
Cannot resolve constructor `String(null)`
Run Code Online (Sandbox Code Playgroud)
现在Integer和String都有接受的构造函数String.那么字符串如何给出编译错误而不是整数错误.
打电话给第一个电话
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
Run Code Online (Sandbox Code Playgroud)
所以我期待字符串一也打电话
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
Run Code Online (Sandbox Code Playgroud)
我无法理解这是如何发生的,并且编译器被迫在一个而不是其他的编译错误.
String string = new String(null);
Run Code Online (Sandbox Code Playgroud)
给我一个不同的错误.
这是一个模糊的调用,因为它们public String(char value[])和public String(String original)构造函数都匹配.
你可以试试 :
String string = new String((String) null);
Run Code Online (Sandbox Code Playgroud)
要么
String string = new String((char[]) null);
Run Code Online (Sandbox Code Playgroud)
解决歧义.
另一方面,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |