Android Java函数参数中“…”和“[]”有什么区别?

What is the difference between “…” and “[]” in Android Java function parameters?

本问题已经有最佳答案,请猛点这里访问。

我看到了这样的例子,其中一个将数组参数放在一个函数上:

1
2
3
4
function f(String... strings)
{

}

我想这是一种表达"期望无限多的字符串"的方式。

但它与String[] strings有什么不同?

我应该何时/为什么/如何使用它(三点符号)?


正如你已经猜到的那样…表示法(称为varargs)定义给定类型的一个或多个参数。在这两种情况下,您都将得到一个字符串[]。区别在于主叫方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
}

它们之间的区别在于调用函数的方式。使用字符串var参数,可以省略数组创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
    }
}

来源


我来逐一回答你的问题。

第一个函数f(字符串…字符串){}(…)标识变量个数的参数,这意味着多个参数。可以传递n个参数。请参考以下示例,

1
2
3
4
5
6
7
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函数中,只能使用字符串数组。在这里,您可以在运行时通过命令行传递参数。

1
2
3
4
5
class Sample{
     public static void main(String args[]){
        System.out.println(args.length);
     }
 }

java Sample test 10 20

第三,你应该在何时何地使用手段,

假设您想通过命令行传递参数,也可以在运行时使用string[]string。

假设您希望在任何时候从程序或手动传递n个参数,那么您可以使用(…)多个参数。


字符串…正如你所说,字符串的数量是不确定的。字符串[]需要一个数组

两者的区别在于,数组的大小是固定的。如果它是函数f(string[]string s),则它只是预期的参数。