この構文は何のために便利ですか:
function(String... args)
これは書くことと同じですか
function(String[] args)
このメソッドを呼び出している間だけ違いがありますか、それとも他の機能が関与していますか?
2つの唯一の違いは、関数の呼び出し方法です。 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);
}
}
違いは、メソッドを呼び出す場合のみです。 2番目の形式は配列で呼び出す必要があり、1番目の形式は配列で呼び出すことができます(2番目の形式と同様に、これはJava standard)に従って、または文字列(コンマで区切られた複数の文字列)または引数なし(2番目の文字列には常に1つが必要です。少なくともnullを渡す必要があります)。
構文的には砂糖です。実際にコンパイラは回る
function(s1, s2, s3);
に
function(new String[] { s1, s2, s3 });
内部的に。
可変引数(String...
)次の方法でメソッドを呼び出すことができます。
function(arg1);
function(arg1, arg2);
function(arg1, arg2, arg3);
配列(String[]
)
最初の関数を次のように呼び出します。
function(arg1, arg2, arg3);
一方、2番目:
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);
}
}
}