В чем разница между "..." и "[]" в параметрах Java-функций Android?

Я видел примеры, когда один помещает параметр массива в функцию, как это:

function f(String... strings)
{

}

и я думаю, что это один из способов сказать "ожидать неопределенного количества строк".

Но как это отличается от String[] strings?

Когда / почему / как я должен использовать это (обозначение трех точек)?

4 ответа

Как вы уже догадались, нотация... (называемая 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
}

Разница между ними заключается в том, как вы вызываете функцию. С помощью 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);
    }
}

Источник

Позвольте мне попытаться ответить на ваш вопрос один за другим.

Во-первых, функция f(String... strings) { } (...) определяет переменное число аргументов, что означает множественные аргументы. Вы можете передать число аргументов. Пожалуйста, обратитесь к приведенному ниже примеру,

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 вы можете использовать только строковый массив. Здесь вы можете передать аргументы через командную строку во время выполнения.

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

java Образец теста 10 20

В-третьих, когда и где вы должны использовать средства,

Предположим, вы хотите передать аргументы через командную строку, а также во время выполнения вы можете использовать строку String[].

Предположим, что вы хотите передать n количество аргументов в любое время из вашей программы или вручную, тогда вы можете использовать (...) несколько аргументов.

String... strings - это, как вы сказали, неопределенное число Strings. String[] ожидает массив

Разница в том, что массив имеет фиксированный размер, с которым он инициализируется. Если это функция f(String[] strings), то это просто ожидаемый параметр.

Другие вопросы по тегам