Единственной разницей между этими двумя является способ, которым Вы вызываете функцию. Со Строковым 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);
}
}
Различие только при вызове метода. Вторая форма должна быть вызвана с массивом, первая форма может быть вызвана с массивом (точно так же, как второй, да, это допустимо согласно стандарту Java) или со списком строк (несколько строк, разделенных запятой), или без аргументов вообще (второй всегда должен иметь один, по крайней мере, пустой должен быть передан).
Это является синтаксически сахарным. На самом деле повороты компилятора
function(s1, s2, s3);
в
function(new String[] { s1, s2, s3 });
внутренне.
с varargs (String...
) можно назвать метод этим путем:
function(arg1);
function(arg1, arg2);
function(arg1, arg2, arg3);
Вы не можете сделать этого с массивом (String[]
)
Вы вызываете первую функцию как:
function(arg1, arg2, arg3);
, в то время как второй:
String [] args = new String[3];
args[0] = "";
args[1] = "";
args[2] = "";
function(args);
На размере получателя Вы получите массив Строки. Различие находится только на стороне вызова.
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);
}
}
}