разность fn (String … args) vs fn (String args)

Этот синтаксис полезен для:

function(String... args) 

Это то же самое, что писать

  function(String[] args) 

с разницей только при вызове этого метода или существует ли какая-либо другая функция?

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

Разница заключается только при вызове метода. Вторая форма должна быть вызвана с помощью массива, первая форма может быть вызвана с помощью массива (как и вторая, да, это допустимо в соответствии со стандартом Java) или со списком строк (несколько строк, разделенных запятой) или без каких-либо аргументов (второй всегда должен иметь один, по крайней мере, нуль должен быть передан).

Это синтаксически сахар. Фактически компилятор поворачивается

 function(s1, s2, s3); 

в

 function(new String[] { s1, s2, s3 }); 

внутренне.

с varargs ( String... ) вы можете вызвать метод следующим образом:

 function(arg1); function(arg1, arg2); function(arg1, arg2, arg3); 

Вы не можете сделать это с помощью массива ( String[] )

Вы вызываете первую функцию как:

 function(arg1, arg2, arg3); 

а второй:

 String [] args = new String[3]; args[0] = ""; args[1] = ""; args[2] = ""; function(args); 

На размер приемника вы получите массив String. Разница только на вызывающей стороне.

 class StringArray1 { public static void main(String[] args) { callMe1(new String[] {"a", "b", "c"}); callMe2(1,"a", "b", "c"); callMe2(2); // You can also do this // callMe2(3, 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(int i,String... args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } } 
  • Когда вы используете varargs в Java?
  • Как переменные аргументы реализованы в gcc?
  • Как создать методы переменных аргументов в Objective-C
  • Как передать массив Scala в метод Scala vararg?
  • Какова цель модификаторов h и hh для printf?
  • Как создать многовариантную функцию haskell?
  • Interesting Posts

    Что означают устройства ALSA, такие как «hw: 0,0»? Как я могу определить, что использовать?

    Откройте URL-адрес из Windows Forms

    Удаление нескольких файлов из репозитория Git, которые уже были удалены с диска

    Как импортировать Java-config-class в XML-config, чтобы оба контекста имели компоненты?

    Как вы устанавливаете frameworks Google (Play, Accounts и т. Д.) На виртуальном устройстве Genymotion?

    Выключение дисплея в XP с помощью команды

    Почему я не могу сохранить изменения CSS в Firebug?

    Реализация SMTP-сервера на персональном компьютере (Windows)

    Какие способы защиты электронной почты на сайтах от спам-ботов?

    Как указать правило сопоставления, когда имена свойств различаются

    Передача права собственности на Windows 7

    Поиск полосы пропускания, используемой отдельными компьютерами в домашней сети

    Выберите изменение стиля стрелки

    Генерировать случайные числа с фиксированным средним значением и sd

    Можете ли вы писать виртуальные функции / методы на Java?

    Давайте будем гением компьютера.