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
只是想知道这个输出是什么。假设的castiing是通过Object []并且给出1,2,3作为输出,但是当我使用Object进行投射时我得到了这个输出
答案 0 :(得分:1)
您可以使用
Arrays.toString(new Integer[]{1,2,3});
查看数组的实际内容。
或者将新的Integer [] {1,2,3}转换为Object []而不是Object,即:
printArray((Object[])new Integer[]{1,2,3});
答案 1 :(得分: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的包装器,基本类型不是对象的子类。
答案 2 :(得分:0)
解释代码中发生的事情:
当您调用printArray
方法时,您将数组转换为Object
,所以实际上您只传递一个对象(不是数组)。
printArray
方法中的foreach循环只迭代一次,因为只有一个参数传递给printArray
方法 - Integer[] {1,2,3}
数组。
因此,当您的代码调用toString
时,将调用Array类中的toString
,而不是toString
类中的Integer
,如您所料
最后得到的结果:[Ljava.lang.Integer;@1888759
是由Java中数组类中缺少toString
方法的实现引起的。
要解决代码中的问题:
替换:
printArray((Object)new Integer[]{1,2,3});
使用:
printArray((Object[])new Integer[]{1,2,3});
打印数组调用的内容:
Arrays.toString(new Integer[]{1,2,3});
答案 3 :(得分:0)
正如Marco所说,这使用了Object的默认toString方法,它是(虚拟)内存地址。
我建议使用Arrays.toString方法here
关于使用变量参数 - 尝试通过运行
来反汇编类文件javap -verbose VarArgs
看看它编译成什么 - 你应该看到你的整数数组作为数组的单个元素传递。