gpt4 book ai didi

java - 这个函数是调用自身还是调用重载?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:52 26 4
gpt4 key购买 nike

考虑两个重载:

public void add(Integer value)
{
add(value == null ? null : value.doubleValue());
}

public void add(Double value)
{
// some code here
}

如果我用 Integernull 实例调用第一个,那么三元条件调用重载到 Double,还是它自己调用?

在我的机器上它调用了 Double 重载,但这是定义明确的 Java 吗? JLS 对此有何看法?

最佳答案

是的,明确定义它将调用 Double 重载。它无法调用Integer 重载,因为没有从double(这是条件表达式的类型)到 的隐式转换整数

基本上,其中有两部分是不相关的:

  • 该方法是从重载中调用的
  • 方法参数是一个条件表达式

所以如果你把它想成:

Double d = getSomeDoubleValueFromAnywhere();
add(d);

...您希望调用哪个方法?大概是 add(Double) 方法 - 所以这也是在您的情况下调用的方法。

棘手的部分是确定条件表达式的类型 - 是 Double 还是 double?我相信rules (很难理解,IMO)意味着它是 Double,因为使用了 null 文字(属于 null 类型).相反,如果你有:

Double dv = null;
add(value == null ? dv : value.doubleValue());

... 那么条件表达式类型将为 double,如果 value 曾经是 ,您将得到一个 NullPointerException null,因为它会尝试拆箱 null 值。

关于java - 这个函数是调用自身还是调用重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43500108/

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