Varargs在java中的实际工作情况如何?

Varargs在java中的实际工作情况如何?,java,casting,variadic-functions,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,可以像访问一个对象一样访问它们

我现在正在用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)
b(double... doubles)
它们将是
int

如果你有

a(int... ints)
b(double... doubles)
即使您编写
b(1,2.0f,10L)

如果你有

c(Object... obj)
它将自动装箱原语。这不是var-args的一个特性,而是类型如何根据需要自动装箱。

“Varargs”主要是语法糖

所以

变成

Whatever[]
换句话说:该方法采用您正在使用的Vararg类型的数组

编译器确保vararg方法的每次调用都会收到一个数组(因此编译器或多或少地为您插入
newwhich[]

请注意:您的示例依赖于自动装箱的事实与您也在使用varargs的事实无关


如果您的方法的签名应该是
Object[]
,那么它的工作方式是相同的(减去您现在必须传递一个数组的小东西,而不是仅仅列出您的值,用逗号分隔)。

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);
    }
}

这个过程称为自动装箱。请参阅以获取介绍。这和瓦拉格一点关系都没有不,不是演员。Java中的所有原语都有包装类(例如int和Integer)。可以将其视为自动装箱。