68

Whats this syntax useful for :

    function(String... args)

Is this same as writing

    function(String[] args) 

with difference only while invoking this method or is there any other feature involved with it ?

SpringLearner
  • 13,738
  • 20
  • 78
  • 116
Nrj
  • 6,723
  • 7
  • 46
  • 58

6 Answers6

93

The only difference between the two is the way you call the function. With String var args you can omit the array creation.

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
  • 47,767
  • 15
  • 98
  • 117
  • 2
    Another main advantage to be highlighted is as said in Mecki's answer is that, the var args function can be called even without a single var arg argument. In the above example, callMe2(); produces no compilation error. – Sankaran Srinivasan Mar 24 '19 at 05:49
22

The difference is only when invoking the method. The second form must be invoked with an array, the first form can be invoked with an array (just like the second one, yes, this is valid according to Java standard) or with a list of strings (multiple strings separated by comma) or with no arguments at all (the second one always must have one, at least null must be passed).

It is syntactically sugar. Actually the compiler turns

function(s1, s2, s3);

into

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

internally.

Mecki
  • 125,244
  • 33
  • 244
  • 253
12

with varargs (String...) you can call the method this way:

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

You can't do that with array (String[])

Jin Kwon
  • 20,295
  • 14
  • 115
  • 184
michelemarcon
  • 23,277
  • 17
  • 52
  • 68
  • 1
    Another main advantage to be highlighted is as said in Mecki's answer is that, the var args function can be called even without a single var arg argument. In the above example, function(); produces no compilation error. – Sankaran Srinivasan Mar 24 '19 at 06:03
7

You call the first function as:

function(arg1, arg2, arg3);

while the second one:

String [] args = new String[3];
args[0] = "";
args[1] = "";
args[2] = "";
function(args);
kgiannakakis
  • 103,016
  • 27
  • 158
  • 194
6

On the receiver size you will get an array of String. The difference is only on the calling side.

JesperE
  • 63,317
  • 21
  • 138
  • 197
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);
        }
    }
}
Saw
  • 6,199
  • 11
  • 53
  • 104
kamal
  • 21
  • 1