比较传递null int String和Integer构造函数

时间:2015-12-03 11:32:52

标签: java

考虑以下两个陈述

    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;
    }

我无法理解它是如何发生的,并且编译器被强制编译错误,而不是其他错误。

3 个答案:

答案 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);存在歧义错误。此构造函数不明确