当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《比较传递nullintString和Integer构造函数》经验,为你挑选了2个好方法。

请考虑以下两个陈述

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

我无法理解这是如何发生的,并且编译器被迫在一个而不是其他的编译错误.



1> Eran..:
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)- 因此没有歧义.



2> kryger..:

问题是,具体来说,调用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

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有