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