什么是“String ...”的正确用法

时间:2013-08-25 20:00:07

标签: java arrays string

所以我一直在努力弄清楚Java中String...的重点。根据我的理解,它与String []大致相同,但我无法在此处或Google上找到有关它的任何信息。

有人可以告诉我这是什么以及适当的用法吗? (假设我有一个带参数myMethod(String... args) { ... }

的方法

谢谢!

3 个答案:

答案 0 :(得分:7)

就类型而言,此语法确实与String[]完全相同。但是,它允许调用者通过指定可变数量的String参数来隐式构造数组:

myMethod("a", "b", "c");
myMethod(); // Empty array is also allowed
myMethod("a", "b");

这种语法的一个限制是像这样的参数可能只出现在方法参数列表的末尾。

答案 1 :(得分:2)

这意味着myMethod接受零个或多个String个参数。例如,请参阅here。在Java Language Specification中,这称为变量arity 参数:

  

方法或构造函数的最后一个形式参数是特殊的:它可能是一个变量arity参数,由类型后面的省略号表示。

     

如果最后一个形式参数是变量arity参数,则该方法是一个变量arity方法。否则,它是一种固定的方法。

JLS还在gruesome detail中描述了当存在变量arity参数时如何匹配方法签名。

答案 2 :(得分:2)

...表示该方法支持 var-args ,即变量(数量)参数。

因此,您可以将myMethod()称为

myMethod(); // or
myMethod(str1); // or
myMethod(str1, str2); // and so on

使用相同的方法签名myMethod(String... str)。声明具有多个参数的 var-arg 方法时, var-arg 参数必须在所有其他常规方法参数之后成功。

在方法内部,所有传递的参数都可以作为一个数组访问,该数组的参考名称与参数的名称相同。所以,你可以在这里使用str.length

该功能非常灵活。您甚至可以将String[]传递给它。但是,相反的情况并非如此。采用数组的方法不会接受单个字符串。