0
class VarArgs {
    public static void printArray(Object... args) {
        for (Object obj : args)
            System.out.print(obj + " ");
        System.out.println();
    }

    public static void main(String[] args) {
        printArray( new Integer[] { 1, 2, 3 });
    }
}

控制台的输出是:

   [Ljava.lang.Integer;@1888759 

只想知道这个输出是什么。假定的铸造是通过 Object[] 并给出 1,2,3 作为输出,但是当我使用 Object 进行铸造时,我得到了这个输出

4

4 回答 4

1

您可以使用

Arrays.toString(new Integer[]{1,2,3}); 

查看数组的实际内容。

或者将 new Integer[]{1,2,3} 转换为 Object[] 而不是 Object,即:

printArray((Object[])new Integer[]{1,2,3});
于 2013-05-31T14:03:40.030 回答
0

这与传递数组不同!这与传递可变长度的参数相同,因此该方法将数组视为一个对象,而不是对象数组,因此打印输出。

public static void printArray(Object[] args) {
    for (Object o : args) {
        System.out.println(o);
    }
}

Object[] objects = new Integer[] { 1, 2, 3, 4 };
printArray(objects);

请注意,您需要使用 int 的包装器,原始类型不是对象的子类。

于 2013-05-31T14:03:55.000 回答
0
  • 解释代码中发生的事情:

    1. 当您调用该printArray方法时,您将数组转换为一个,Object因此实际上您只传递了一个对象(而不是数组)。

    2. printArray方法中的 foreach 循环仅迭代一次,因为只有一个参数已传递给该printArray方法 -Integer[] {1,2,3}数组。

    3. 因此,当您的代码调用toString时,会调用toStringArray 类,而不是您可能期望的toStringfromInteger类。

    4. 最后得到的结果是:是由于Java中数组类中方法[Ljava.lang.Integer;@1888759的实现缺失造成的。toString

  • 要解决代码中的问题:

    代替:

    printArray((Object)new Integer[]{1,2,3});
    

    和:

    printArray((Object[])new Integer[]{1,2,3});
    
  • 要打印数组调用的内容:

    Arrays.toString(new Integer[]{1,2,3}); 
    
于 2013-05-31T14:04:42.533 回答
0

正如 Marco 所说,这使用了 Object 的默认 toString 方法,即它的(虚拟)内存地址。

我建议在这里使用 Arrays.toString 方法

关于变量参数的使用 - 尝试通过运行反汇编类文件

javap -verbose VarArgs

看看它编译成什么 - 你应该看到你的整数数组作为数组的单个元素传递。

于 2013-05-31T14:05:51.770 回答