gpt4 book ai didi

Java 方法重载与装箱/加宽

转载 作者:行者123 更新时间:2023-12-01 04:48:02 26 4
gpt4 key购买 nike

我正在研究 Java Se 7 OCA,无法弄清楚为什么下面的代码无法编译。主方法中的方法调用会给出编译错误,指出方法不明确。在此重载方法示例中,加宽和装箱之间的优先级规则似乎发生冲突。

public class Overloading {
public static void main(String[] args) {
Byte i = 5;
byte k = 5;
aMethod(i, k);
}

static void aMethod(byte i, Byte k) {
System.out.println("Inside 1");
}

static void aMethod(byte i, int k) {
System.out.println("Inside 2");
}

static void aMethod(Byte i, Byte k) {
System.out.println("Inside 3 ");
}
}

错误是“方法 aMethod(byte, Byte) 对于类型重载来说不明确”。当我注释掉第一个方法时,第二个方法会出现相同的错误。

我的想法是:第一种方法需要拆箱和装箱第二种方法需要拆箱加宽第三种方法只需要拳击。所以一定是第三种方法,因为它需要的转换最少,而且都有装箱转换。

最佳答案

问题出在所有这些方法上:

static void aMethod(byte i, Byte k) {
System.out.println("Inside 1");
}

static void aMethod(byte i, int k) {
System.out.println("Inside 2");
}

static void aMethod(Byte i, Byte k) {
System.out.println("Inside 3 ");
}

Java 不知道应该调用哪一个:

    aMethod(i, k);

根据JLS ,您的参数ik可以通过多种方式进行转换。规范:

i 可以拆箱byte (5.1.8) 或保留为Byte (5.1.1 ) -> 2 个变体

k 可以装箱Byte(5.1.7)或加宽为int类型(5.1.7)。 2) -> 2 个变体。

关于Java 方法重载与装箱/加宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15493313/

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