Is a variable length argument treated as an array in Java?

一笑奈何 提交于 2019-11-28 10:51:57

Yes, if you have a method with a varargs parameter like this:

public void foo(String... names)

and you call it like this:

foo("x", "y", "z");

then the compiler just converts that into:

foo(new String[] { "x", "y", "z"});

The type of the names parameter is String[], and can be used just like any other array variable. Note that it could still be null:

String[] nullNames = null;
foo(nullNames);

See the documentation for varargs for more information.

This does not mean that varargs are interchangeable with arrays - you still need to declare the method to accept varargs. For example, if your method were declared as:

public void foo(String[] names)

then the first way of calling it would not compile.

They are the same, array is internally used by JVM when creating varargs methods. So you can treat vararg argument in the same way you treat array so use for instance enhanced for loop

public void method(String... args) {
    for(String name : args) {
     //do something
     }
}

and call it like this or even pass an array

method("a", "b", "c"); 
method(new String[] {"a", "b", "c"});

See this nice article for further explanation.

A simple test would suggest that they are the same:

public class test {

    public static void varArgs(String... strings) {
        for (String s : strings) {
            System.out.println(s);
        }
    }

    public static void main(String[] args) {
        String[] strings = {"string1", "string2", "string3"};
        varArgs(strings);
        varArgs("string4", "string5", "string6");
    }
}

Outputs:

string1
string2
string3
string4
string5
string6
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!