如何在Java中使用Varargs?

时间:2016-08-25 11:55:15

标签: java casting variadic-functions

我现在正在学习java中的Varargs。 我写了这个方法:

 public static void vrati(Object... arguments){
    for(Object i : arguments)

    System.out.println(i);
}

然后我打电话给方法:

 main.vrati(8,2,"String");

所以我的问题是:varargs会将原始类型转换为对象吗? 因为我在这个方法调用中混合了int和String,并且可以像一个对象一样访问它们。

3 个答案:

答案 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[],它的工作方式相同(减去您现在必须传递数组的小东西,而不是仅列出您的值,用逗号分隔)。