一系列字符串与字符串Varargs

时间:2016-02-17 11:20:06

标签: java arrays variadic-functions

void method(String[] a)void method(String... a)之间的区别是什么?

第一种方法采用字符串数组,其中第二种方法采用一个或多个String参数。它们提供了哪些不同的功能?

此外,不知道为什么但这有效:

public class Test {

    public static void main(String[] args) {
        String[] a = {"Hello", "World"};
        Test t = new Test();
        t.method(a);
    }

    void method(String...args) {
        System.out.println("Varargs");        // prints Varargs 
    }
}

3 个答案:

答案 0 :(得分:6)

没有区别,只有签名后面还有其他元素。

例如:

user

是可能的,因为jvm无法认为args仍然是public void method(String ... args, String user){} 的元素。

{{1}}
但是,

会造成麻烦。

答案 1 :(得分:2)

唯一的区别是当你调用方法时,调用它作为varargs的可能方法允许多个字符串由","分隔。或者使用数组作为参数。

重要提示:

  

varargs功能可自动化并隐藏多个args的过程   传入一个阵列。

Documentation.

编辑: Java不允许这样public void method(String ... args, String user) 因为varargs必须是要调用的最后一个参数。

答案 2 :(得分:0)

不好,但有时非常有用: 如果在编写代码时,您不知道您的方法获得哪些args作为输入,您的代码看起来像

public class Test {
public static void main(String[] args) {        
    Test t = new Test();
    String[] a = {"Hello", "World"};
    Integer [] b = {1,2};
    t.method(a);
    t.method(b);
    t.method('a',1,"String",2.3); 
}
void method(Object...args) {
    for (Object arg : args){
    System.out.println(arg);        
    }        
}

}