различие fn (Представляют … в виде строки args) по сравнению с fn (Строка [] args)

62
задан SpringLearner 6 November 2013 в 05:49
поделиться

6 ответов

Единственной разницей между этими двумя является способ, которым Вы вызываете функцию. Со Строковым 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);
    }
}
85
ответ дан bruno conde 24 November 2019 в 16:43
поделиться

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

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

function(s1, s2, s3);

в

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

внутренне.

20
ответ дан Mecki 24 November 2019 в 16:43
поделиться

с varargs (String...) можно назвать метод этим путем:

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

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

11
ответ дан Jin Kwon 24 November 2019 в 16:43
поделиться

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

function(arg1, arg2, arg3);

, в то время как второй:

String [] args = new String[3];
args[0] = "";
args[1] = "";
args[2] = "";
function(args);
7
ответ дан kgiannakakis 24 November 2019 в 16:43
поделиться

На размере получателя Вы получите массив Строки. Различие находится только на стороне вызова.

6
ответ дан JesperE 24 November 2019 в 16:43
поделиться
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);
        }
    }
}
2
ответ дан 24 November 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: