可能是重复问题:
可变参数和“...”参数
Java中的三个点参数
我在我的Android Java文件中看到了这个定义。 它看起来就像String[]。它们有什么不同吗? 谢谢。
可能是重复问题:
可变参数和“...”参数
Java中的三个点参数
我在我的Android Java文件中看到了这个定义。 它看起来就像String[]。它们有什么不同吗? 谢谢。
varags
。如果一个方法的声明是method(Param param, String... x)
,那么它将接受一个Param
类型的对象和任意数量的字符串对象。
这里有一些很酷的东西:
它没有什么特别之处,只不过是数组的语法糖。因此,method(MyObject... o)
与method(MyObject[] o)
相同。
可变参数必须是参数列表中的最后一个参数。
有一件有趣的事情曾经困扰了我。可以像调用method()
一样调用method(MyObject... o)
,而不会出现任何编译错误。Java会在内部将无参调用转换为method(new MyObject[0])
。所以要注意这一点。
这是写数组项作为参数的语法。
例如:
public String first (String... values) {
return values[0];
}
然后,您可以使用first("4","2","5","67")
调用此方法。
Java编译器会自动创建参数数组。
它是一个可变数量参数(vararg),在方法体内,你可以将其视为String[],但是当你调用该方法时,你可以选择提供一个String[]或者只枚举你的值。
void foo(String... blah) { }
void bar() {
String[] a = { "hello", "world" };
foo(a); // call with String[]
foo("hello", "world"); // or simply enumerate items
}
从Java 5开始引入的。
String
是字符串类型。
String[]
是字符串数组。
String ...
是一种语法糖,称为省略号,引入自Java 1.5并来自C。它可以在方法定义中使用,实际上与数组相同,只有一个区别。
如果方法被定义为:
public void foo(String[] arg){}
你必须传递一个数组:
foo(new String[] {"a", "b"});
如果方法被定义为:
public void foo(String arg){}
你可以这样调用它:
foo(new String[] {"a", "b"});
或者
foo("a", "b");