区别fn(String … args)vs fn(String args)

什么是这个语法有用的:

function(String... args) 

这和写作一样吗?

  function(String[] args) 

只有在调用这个方法时才有区别,还是还有其他的特性呢?

两者之间唯一的区别就是你调用函数的方式。 使用String var args可以省略数组的创build。

 public static void main(String[] args) { callMe1(new String[] {"a", "b", "c"}); callMe2("a", "b", "c"); // You can also do this // callMe2(new String[] {"a", "b", "c"}); } public static void callMe1(String[] args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } public static void callMe2(String... args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } 

只有在调用方法时才有所不同。 第二种forms必须用一个数组来调用,第一种forms可以用一个数组来调用(就像第二种forms,是的,这是根据Java标准是有效的)或者用一串string(用逗号分隔的多个string)或根本没有参数(第二个总是必须有一个,至lessnull必须通过)。

这是语法上的糖。 其实编译器转向

 function(s1, s2, s3); 

 function(new String[] { s1, s2, s3 }); 

内部。

与可变参数( String... )你可以这样调用方法:

 function(arg1); function(arg1, arg2); function(arg1, arg2, arg3); 

你不能用array( String[] )来做到这一点

您将第一个函数称为:

 function(arg1, arg2, arg3); 

而第二个:

 String [] args = new String[3]; args[0] = ""; args[1] = ""; args[2] = ""; function(args); 

在接收器的大小,你会得到一个string的数组。 差别只在于呼叫方。

 class StringArray1 { public static void main(String[] args) { callMe1(new String[] {"a", "b", "c"}); callMe2(1,"a", "b", "c"); callMe2(2); // You can also do this // callMe2(3, new String[] {"a", "b", "c"}); } public static void callMe1(String[] args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } public static void callMe2(int i,String... args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } }