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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |