2016-02-17 126 views
0

void method(String[] a)void method(String... a)有什么区别?Strings vs String Varargs的阵列

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

而且,不知道为什么,但是这是工作:

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 
    } 
} 
+1

第二个是只是一个*语法糖*你不必传递一个固定大小的数组,而是一个逗号分隔的字符串值 – TheLostMind

回答

4

没有区别,仅在有后,其他元素的签名。

例如:

public void method(String[] args, String user){} 

是可能的,因为没有办法的JVM会认为user仍然是args的元素。

public void method(String ... args, String user){} 

虽然会引起麻烦。

+3

只是你知道:底部的例子甚至没有编译,java只允许varargs作为最后一个参数 – Ferrybig

+0

String ... args应该是最后一个参数。作为公共无效方法(字符串用户,字符串... args){} –

+0

@Ferrybig这是我的意思是“会造成麻烦,但”,“只有在签名后有其他元素” – Stultuske

2

唯一的区别是当您调用该方法时,以及调用它的可能方式,因为可变参数允许多个字符串用“,”或使用数组作为参数分隔。

重要提示:

可变参数设有自动化并隐藏在阵列通过多个ARGS 的过程。

Documentation.

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

0

不是很好,但有时非常有用: 如果在写你的代码,你不知道哪个ARG游戏的方法获取作为输入的时候你的代码看起来像

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

}