java-区别fn(String ... args)vs fn(String [] args)

这个语法对什么有用:

    function(String... args)

这和写作一样吗

    function(String[] args) 

仅在调用此方法时有所不同,还是有其他功能?

Nrj asked 2019-10-09T17:20:40Z
6个解决方案
83 votes

两者之间的唯一区别是调用函数的方式。 使用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);
    }
}
bruno conde answered 2019-10-09T17:20:51Z
20 votes

区别仅在于调用该方法时。 第二种形式必须用数组调用,第一种形式可以用数组(就像第二种一样,是的,根据Java标准是有效的)或用字符串列表(用逗号分隔的多个字符串)来调用,或者 完全没有参数(第二个参数始终必须有一个参数,至少必须传递null)。

它在语法上是糖。 其实编译器转

function(s1, s2, s3);

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

内部。

Mecki answered 2019-10-09T17:21:30Z
10 votes

使用varargs(String...),您可以通过以下方式调用该方法:

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

您无法使用数组做到这一点(String[]

michelemarcon answered 2019-10-09T17:22:02Z
7 votes

您将第一个函数称为:

function(arg1, arg2, arg3);

而第二个:

String [] args = new String[3];
args[0] = "";
args[1] = "";
args[2] = "";
function(args);
kgiannakakis answered 2019-10-09T17:22:32Z
6 votes

在接收器大小上,您将获得一个String数组。 区别仅在于呼叫方。

JesperE answered 2019-10-09T17:22:56Z
2 votes
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);
        }
    }
}
kamal answered 2019-10-09T17:23:14Z
translate from https://stackoverflow.com:/questions/301563/difference-fnstring-args-vs-fnstring-args