07/07/12 11:56:27
質問というか、Javaの可変長引数の仕様で疑問に思ったのですが、
void test(int... vector) {
if (vector.length == 0)
System.out.println("vectorは空です.");
else
for (int i : vector)
System.out.print(i + " ");
}
こういうメソッドを書くと、可変長引数は引数なしでも実行できるので、
test();
と呼び出すと、"vectorは空です."と表示されます。
ですが、同名の以下のメソッドを同じクラスで定義すると、
オーバーロードされますので、引数が0のときの振る舞いが不定のように見えます。
void test() {
test(1);
}
実際にやってみたところ、下の関数が呼び出され、"1 "が表示されました。
可変長引数よりもオーバーロードのほうが優先されることがわかりましたが、
引数的にはどちらでも呼び出せるので、しっくりこません。
よければこのようになる理由を教えてもらえますか?