[英]How realy work Varargs in java?
我现在正在学习java中的Varargs。 我写了这个方法:
public static void vrati(Object... arguments){
for(Object i : arguments)
System.out.println(i);
}
然后我打电话给方法:
main.vrati(8,2,"String");
所以我的问题是:varargs是否将原始类型转换为对象? 因为我在这个方法调用中混合了int和String,并且可以像一个对象一样访问它们。
所以我的问题是varargs将原始类型转换为对象吗?
它转换为数组的类型。 如果你有
a(int... ints)
他们将是int
如果你有
b(double... doubles)
即使你写b (1, 2.0f, 10L)
它们也将是双打的
如果你有
c(Object... obj)
它将是autobox原语。 这不是var-args的一个特性,但无论如何都要根据需要对类型进行自动装箱。
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);
}
}
“Varargs”主要是语法糖。
所以
Whatever...
变成
Whatever[]
换句话说:该方法采用您正在使用的Vararg类型的数组 。
并且编译器确保vararg方法的每个和任何调用都接收一个数组(因此编译器会为您更多或更少地插入new Whatever[]
)。
请注意:您的示例依赖于自动装箱这一事实与您使用varargs无关。
如果您的方法的签名反而是Object[]
,它的工作方式相同(减去您现在必须传递数组的小东西,而不是仅列出您的值,用逗号分隔)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.