gpt4 book ai didi

Java : Overloading

转载 作者:行者123 更新时间:2023-12-01 20:16:15 26 4
gpt4 key购买 nike

使用包装类重载方法

void Test1(Object o)
{
System.out.println("object");
}


void Test1(Integer o)
{
System.out.println("Integer");
}

void Test1(Long o)
{
System.out.println("Long");
}

调用 Test1(1) 将调用 Integer,但是当我们在以 Integer 作为文本注释方法后调用 Test1(1) 时,它将调用 Object 文本的方法,而不是 Long 方法。

再次

void Test1(Object o)
{
System.out.println("object");
}


void Test1(Integer o)
{
System.out.println("Integer");
}

void Test1(Long o)
{
System.out.println("Long");
}
void Test1(int o)
{
System.out.println("int");
}

还要考虑我们调用 Test1('a') 时的情况,因此它将调用 int one。现在删除 int 1,因此它应该调用 Integer 1,因为“a”将更改为 int,而 int 将更改为 Integer,但在这种情况下,它将调用 Object 1。有什么具体原因吗?

最佳答案

自动装箱转换,如 JLS 5.1.7 中指定。 ,非常具体。 int 只会转换为 Integer

因此,您有两个重载:一个需要 Long,另一个需要 Object。请注意,Long扩展 Integer。因此,如果您传入 Integer 类型的参数,Long 方法将无法接受它。唯一可以的重载是采用 Object 的重载。

您的困惑可能源于以下两种想法之一:

  • 转换将尝试 1 -> 1L -> Long.valueOf(1L)
  • 或者 Long 扩展了 Integer,因此采用 Long 的方法可以接受 Integer 的参数

这些在 Java 中都不是真的。

关于Java : Overloading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45742919/

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