Этот синтаксис полезен для:
function(String... args)
Это то же самое, что писать
function(String[] args)
с разницей только при вызове этого метода или есть ли какая-либо другая функция, связанная с ним?
Этот синтаксис полезен для:
function(String... args)
Это то же самое, что писать
function(String[] args)
с разницей только при вызове этого метода или есть ли какая-либо другая функция, связанная с ним?
Единственное различие между ними - это то, как вы вызываете функцию. С помощью 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);
}
}
Разница заключается только при вызове метода. Вторая форма должна быть вызвана с помощью массива, первая форма может быть вызвана с помощью массива (как и вторая, да, это допустимо в соответствии со стандартом 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);
В размере получателя вы получите массив String. Разница заключается только в вызывающей стороне.
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);
}
}
}