gpt4 book ai didi

java - Var-arg of object arrays vs. object array——试图理解一道SCJP自测题

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:38 25 4
gpt4 key购买 nike

我无法理解这个问题,也无法理解 SCJP 1.6 自测问题的答案解释。这是问题所在:

class A { }
class B extends A { }
public class ComingThru {
static String s = "-";
public static void main(String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa);
sifter(ba);
sifter(7);
System.out.println(s);
}
static void sifter(A[]... a2) { s += "1"; }
static void sifter(B[]... b1) { s += "2"; }
static void sifter(B[] b1) { s += "3"; }
static void sifter(Object o) { s += "4"; }
}

结果是什么?答案是-434,但让我失望的是这本书的解释。这与本章前面对概念的解释方式大不相同。

"In general, overloaded var-args methods are chosen last. Remember that arrays are objects. Finally, an int can be boxed to an Integer and then "widened" to an Object."

将其拆分,有人可以进一步定义该解释吗?

  1. 通常,重载的 var-args 方法最后选择。
  2. 数组是对象(我确实明白这一点,但为什么这与这个问题相关)。
  3. 可以将 int 装箱为 Integer,然后“扩大”为 Object。

谢谢!

最佳答案

这本书试图解释为什么前两个重载从未被选中:因为可变参数标记 ... 使它们仅在所有其他可能的重载失败时才被使用。在这种情况下,这不会发生——以“记住”开头的两个句子解释了为什么它不会发生,为什么在第一个和最后一个案例中存在其他可能的重载(第二个案例及其与第三个重载的匹配sifter 很明显):数组是一个对象,一个 int 可以装箱然后扩大为一个对象,因此第 4 个重载匹配对 sifter 的第一次和最后一次调用。

关于java - Var-arg of object arrays vs. object array——试图理解一道SCJP自测题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1129282/

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