使用包装类重载方法
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/