65

この構文は次の場合に役立ちます:

    function(String... args)

これは書くことと同じですか?

    function(String[] args) 

このメソッドを呼び出している間だけ違いがありますか、それとも他の機能が関係していますか?

4

6 に答える 6

90

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);
    }
}
于 2008-11-19T11:13:37.980 に答える
23

違いは、メソッドを呼び出すときだけです。2 番目のフォームは配列で呼び出す必要があり、最初のフォームは配列で呼び出すことができます (2 番目のフォームと同様、はい、これは Java 標準に従って有効です) または文字列のリスト (コンマで区切られた複数の文字列) で呼び出すことができます。引数はまったくありません (2 番目の引数には必ず引数が必要で、少なくとも null を渡す必要があります)。

構文的に砂糖です。実際にコンパイラは

function(s1, s2, s3);

の中へ

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

初めの。

于 2008-11-19T11:38:14.437 に答える
12

varargs ( String...) を使用すると、次の方法でメソッドを呼び出すことができます。

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

String[]配列 ( )でそれを行うことはできません

于 2008-11-19T11:17:45.693 に答える
7

最初の関数を次のように呼び出します。

function(arg1, arg2, arg3);

2番目のもの:

String [] args = new String[3];
args[0] = "";
args[1] = "";
args[2] = "";
function(args);
于 2008-11-19T11:16:13.013 に答える
6

レシーバーのサイズでは、文字列の配列を取得します。違いは呼び出し側だけです。

于 2008-11-19T11:06:25.140 に答える
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);
        }
    }
}
于 2010-08-09T11:57:40.193 に答える