質問: Java には、可変長引数があります。 ``` public void message( String... message ) { } ``` この可変長引数は、引数の数文要素を持つ配列を内部で作成するらしいのですが、 だとしたら配列を渡すのでいいのではないか、と思いました。 ``` public void message( String[] message ) { } ``` また、可変長引数には要素が0の場合もあるそうです。 例えば、メッセージを出力する関数なら、要素が0なら使う必要はないでしょう。 では、可変長引数を使うような例とはどのような場合なのでしょうか。
回答: 可変長引数は配列を受け取りますが、逆は成り立ちません。 ``` class MyClass { static void funcArr(int[] args) {} static void funcVar(int... args) {} } ``` ``` MyClass.funcArr(new int[]{ 1, 2, 3 }); // NG: MyClass.funcArr(1, 2, 3); MyClass.funcVar(new int[]{ 1, 2, 3 }); MyClass.funcVar(1, 2, 3); ``` 可変長引数の方が適用できる範囲が広いことが分かります。 > > また、可変長引数には要素が0の場合もあるそうです。 > > 例えば、メッセージを出力する関数なら、要素が0なら使う必要はないでしょう。 > > > 要素数が0のときにも使えるのは確かですが、それに限った話をする必要も無いでしょう。 任意個数の引数を受け取れるというメリットは潰れていないのでは? ただし もちろんこんなことはできませんが。 ``` static void funcVar(int... args1, int... args2) {} ```