Подтвердить что ты не робот

Разность fn (String... args) vs fn (String [] args)

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

    function(String... args)

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

    function(String[] args) 

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

4b9b3361

Ответ 1

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

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

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

function(s1, s2, s3);

в

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

внутри.

Ответ 3

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

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

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

Ответ 4

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

function(arg1, arg2, arg3);

а второй:

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

Ответ 5

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

Ответ 6

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);
        }
    }
}