加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java null对应于Double

发布时间:2020-12-15 05:12:43 所属栏目:Java 来源:网络整理
导读:我不知道如何提出这个问题或使用什么标题.我希望我不违反任何规则.无论如何,有人可以向我解释以下行为吗?我有这个代码: X x = new X();x.dosmth(null);static class X{ void dosmth(Object obj) { System.out.println("X:Object"); } void dosmth(Double o
我不知道如何提出这个问题或使用什么标题.我希望我不违反任何规则.无论如何,有人可以向我解释以下行为吗?我有这个代码:

X x = new X();
x.dosmth(null);

static class X{
        void dosmth(Object obj) { System.out.println("X:Object"); }
        void dosmth(Double obj) { System.out.println("X:Double"); }
        void dosmth(int obj) { System.out.println("X:int"); }
        void dosmth(double obj) { System.out.println("X:double"); }
        void dosmth(char obj) { System.out.println("X:char"); }
        void dosmth(byte obj) { System.out.println("X:byte"); }
}

我得到的是这个:

X:Double

为什么它完全忽略了这条线

void dosmth(Object obj) { System.out.println("X:Object"); }

为什么null对应Double而不是Object?

另外,如果我添加这一行:

void dosmth(Integer obj) {System.out.println("X:Integer"); }

我收到以下错误:

both method dosmth(java.lang.Integer) and method dosmth(java.lang.Double) match

解决方法

选择重载方法时,null可以对应于任何引用类型.如果有两个候选项 – 在你的情况下为Object和Double – 则选择最具体的一个 – Double(Double比Object更具体,因为它是Object的子类).

当你引入void dosmth(Integer obj)时,有三个候选者 – 对象,双精度和整数 – 但由于Double和Integer都没有比另一个更具体 – 编译器不能在那之间做出选择而你会得到一个错误.

正如FINDarkside所提到的,如果你选择了一个特定的方法,你可以将null转换为所需的类型.

例如,这将强制编译器选择void dosmth(Object obj):

x.dosmth((Object)null);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读