繁体   English   中英

如何在Java中使用Varargs?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM