我现在正在学习java中的Varargs。 我写了这个方法:
public static void vrati(Object... arguments){
for(Object i : arguments)
System.out.println(i);
}
然后我打电话给方法:
main.vrati(8,2,"String");
所以我的问题是:varargs会将原始类型转换为对象吗? 因为我在这个方法调用中混合了int和String,并且可以像一个对象一样访问它们。
答案 0 :(得分:8)
所以我的问题是varargs将原始类型转换为对象吗?
它转换为数组的类型。如果你有
a(int... ints)
他们将是int
如果你有
b(double... doubles)
即使你写b (1, 2.0f, 10L)
,它们也会翻倍
如果你有
c(Object... obj)
它将是autobox原语。这不是var-args的一个特性,但是无论如何都要根据需要对类型进行自动装箱。
答案 1 :(得分:2)
Varargs是可变数量的参数。它允许从0到无限制的参数。 Varargs用......表示(三点)。 Varargs必须是函数的最后一个参数。请考虑以下程序:
class Test
{
static void display(Object ... o)
{
for(Object o1 : o)
System.out.print(o1+" ");
System.out.println();
}
public static void main(String []args)
{
display();
display(10,20,30,40,50);
display(10.2f,20.3f,3.14f);
}
}
答案 2 :(得分:0)
"可变参数"主要是语法糖。
所以
Whatever...
变成
Whatever[]
换句话说:该方法采用您正在使用的Vararg类型的数组。
编译器确保vararg方法的每次调用和任何调用都接收一个数组(因此编译器会为你或多或少地插入new Whatever[]
)。
请注意:您的示例依赖于自动装箱这一事实与您使用varargs无关。
如果您的方法的签名改为Object[]
,它的工作方式相同(减去您现在必须传递数组的小东西,而不是仅列出您的值,用逗号分隔)。