我看到了一个例子,其中一个数组参数放在这样的函数中:
function f(String... strings)
{
}
我想这是说“期望无限数量的字符串”的一种方式。
但它与String[] strings
有什么不同?
何时/为何/如何使用它(三点符号)?
答案 0 :(得分:5)
正如您已经猜到的那样,......符号(称为varargs)定义了给定类型的一个或多个参数。在您的方法中,您将在两种情况下获得String []。区别在于呼叫方。
public void test1(String... params) {
// do something with the String[] params
}
public void test2(String[] params) {
// do something with the String[] params
}
public void caller() {
test1("abc"); // valid call results in a String[1]
test1("abc", "def", "ghi"); // valid call results in a String[3]
test1(new String[] {"abc", "def", ghi"}); // valid call results in a String[3]
test2("abc"); // invalid call results in compile error
test2("abc", "def", "ghi"); // invalid call results in compile error
test2(new String[] {"abc", "def", ghi"}); // valid call
}
答案 1 :(得分:2)
它们之间的区别在于您调用该函数的方式。使用String var args,您可以省略数组创建。
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);
}
}
答案 2 :(得分:1)
让我试着逐一回答你的问题。
首先函数f(String ... strings){} (...)标识可变数量的参数,这意味着多个参数。 你可以传递n个参数。请参考以下示例
static int sum(int ... numbers)
{
int total = 0;
for(int i = 0; i < numbers.length; i++)
total += numbers[i];
return total;
}
你可以调用这个函数 总和(10,20,30,40,50,60);
其次 String []字符串也类似于多个参数但在Java main函数中只能使用字符串数组。在这里,您可以在运行时通过命令行传递参数。
class Sample{
public static void main(String args[]){
System.out.println(args.length);
}
}
java Sample test 10 20
第三,何时何地应使用手段,
假设您想通过命令行传递参数,也可以运行时使用String [] string。
假设您希望随时从程序中传递n个参数或手动传递n个参数,那么您可以使用(...)多个参数。
答案 3 :(得分:0)
String ...字符串就像你说的无限数量的字符串一样 String []需要一个数组
两者的不同之处在于,数组具有固定的大小,并且已初始化。 如果它是函数f(String []字符串),它只是预期的参数。