разница ФН(строки... аргументы) против ФН(string[] аргументы)


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

    function(String... args)

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

    function(String[] args) 

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

6 57

6 ответов:

единственное различие между ними заключается в том, как вы вызываете функцию. С помощью 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) или со списком строк (несколько строк, разделенных запятой) или без аргументов вообще (второй всегда должен иметь один, по крайней мере null должен быть передан).

Это синтаксически сахара. На самом деле компилятор получается

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