gpt4 book ai didi

java null对应Double

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:41 24 4
gpt4 key购买 nike

我不知道如何提出这个问题或使用什么标题。我希望我没有违反任何规则。无论如何,有人可以向我解释以下行为吗?我有这段代码:

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可以对应任何引用类型。当有两个候选人时 - ObjectDouble 在你的情况下 - 选择最具体的一个 - Double (DoubleObject 更具体,因为它是 Object 的子类。

当您引入 void dosmth(Integer obj) 时,有三个候选对象 - ObjectDoubleInteger - 但由于 DoubleInteger 都不比另一个更具体 - 编译器无法在两者之间做出选择,你会得到一个错误。

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

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

x.dosmth((Object)null);

关于java null对应Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29472848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com