差异fn(String ... args)vs fn(String [] args)

时间:2008-11-19 10:58:28

标签: java variadic-functions

这种语法对以下内容有用:

    function(String... args)

与写作相同

    function(String[] args) 

仅在调用此方法时有区别,或者是否涉及到其他任何功能?

6 个答案:

答案 0 :(得分:83)

两者之间的唯一区别是你调用函数的方式。使用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);
    }
}

答案 1 :(得分:20)

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

语法上是糖。实际上编译器转了

function(s1, s2, s3);

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

内部。

答案 2 :(得分:10)

使用varargs(String...)你可以这样调用方法:

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

您无法使用数组(String[]

执行此操作

答案 3 :(得分:7)

您将第一个函数称为:

function(arg1, arg2, arg3);

而第二个:

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

答案 4 :(得分:6)

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

答案 5 :(得分:2)

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