当前位置: 首页 > 面试题库 >

对象数组与对象数组的Var-arg —试图了解SCJP自测问题

季森
2023-03-14
问题内容

我在理解这个问题以及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,但令我失望的是这本书的解释。它与本章前面的概念有很大的不同。

“通常,最后选择重载的var-args方法。请记住,数组是对象。最后,可以将int装箱为Integer,然后“扩展”为Object。”

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

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

谢谢!


问题答案:

该书试图解释为什么从不选择前两个重载:因为var-
args标记...使它们仅在其他所有可能的重载失败时才使用。在这种情况下,这种情况不会发生-以“记住”开头的两个句子解释了为什么不会发生,为什么在第一种情况和最后一种情况下还存在其他可能的重载(第二种情况及其与第3种重载的匹配)
sifter的值是显而易见的):数组是一个对象,可以将int装箱然后扩展为Object,因此第4个重载匹配对Sifter的第一个和最后一个调用



 类似资料:
  • 问题内容: 问题在于确定以下符号之间的权衡: 基于JSON : 基于数组 : 关于同一问题的这篇文章,我已经决定(在前端)使用JSON对象表示法而不是对象数组,因为它符合我的要求,更好的性能和更少的浏览器代码。 但是问题在于列表本身不是静态的。我的意思是,该列表正在生成,即从DB(NoSQL)获取/存储,并通过服务器上的JavaAPI为新条目创建。我无法决定在后端应使用哪种表示法(最终也会影响UI

  • 尝试使用所有独特的硬币进行选择过滤器,但无法正确到达其末尾。 在循环浏览数据时,我可以得到所有硬币的列表。 我还想使用Set方法和spread操作符来获得唯一的值,但我不知道如何组合所有这些。

  • 问题 你想要得到一个与你的某些属性匹配的数组对象。 你有一系列的对象,如: cats = [ { name: "Bubbles" favoriteFood: "mice" age: 1 }, { name: "Sparkle" favoriteFood: "tuna" }, { name: "flyingCat" favo

  • 我在创建包含自定义对象数组的数组时遇到了问题。 出于多种原因,我希望将容器创建为可比较数组的标准数组: 其中包含的每个自定义对象数组必须具有不同的长度 自定义对象数组内置了自动排序工具,这些工具不适合我希望它们适合的较大包含数组 自定义对象数组可以工作,并且已经过彻底测试。 我在创建较大对象时收到的例外情况是: 线程“main”中出现异常java.lang.ClassCastException:

  • 我使用Nodejs,有一个对象包含一个object数组(API请求的结果)和一个简单的值数组。 它们看起来是这样的: 如何将包含对象数组的对象与简单数组进行比较? 我要找的是,从简单数组中获取ID,并将它们与另一个“复杂”对象进行比较,以检索属性以及简单数组中的相应ID和另一个对象属性,然后将结果存储在一个对象数组中。 简单来说,我希望有这样的结果: 当从API请求中检索“复杂”对象时,我尝试了以

  • 本文向大家介绍JavaScript中的Array 对象(数组对象),包括了JavaScript中的Array 对象(数组对象)的使用技巧和注意事项,需要的朋友参考一下  1、创建Array对象方法: --->var arr = [1,2,3];//简单的定义方法 此时可以知道 此时可以知道: 2、Array对象属性 Array常见的属性有三个:constructor、length和prototyp