2011-08-05 14 views

答えて

6

違いはありません(コマンドラインからプログラムを実行したとき、つまりメインメソッドがどのように使用されているか)。最初の亜種は、Java 5がvarargsを導入した後に登場しました。

つまり、varargsを使用すると、メソッドに可変数の引数を渡すことができます。メソッド本体の場合、引数は配列にグループ化されます。 Test.main(new String[] {"foo", "bar"})の代わりにTest.main("foo", "bar")のようにします。コンパイラは、シーンの背後にあるあなたのための配列作成を行います。

+0

2番目の段落は、最初の文に反して違いを示すようです... –

+0

実行時コマンドラインからのプログラム、主な方法が意図しているもの。追加の説明 – Bozho

+0

このタイプの可変長引数は他の場所でも使用できますか? –

6

唯一の違いは、mainを他のJavaコードから直接呼び出す場合です。最初の形式は、あなたが書くことができます:

Test.main("first", "second", "third"); 

第二は、明示的に配列を作成するためにあなたを必要とするのに対し:

Test.main(new String[] { "first", "second", "third" }); 

個人的に私は私が今まで使用された最初のフォームを見てきたとは思いません - 他のコードからmainと呼ぶのはかなりまれです。しかし、何もが間違っているです。

+0

興味深いことに、2つのフォームのJNI署名は同じです。 (JNI経由でJavaプラグインをC++にロードするために、明示的に 'Class.main()'を呼び出すので気にします)。 –

+0

そして私にとってうまくいかないのは、 'test.main(" a "、" b "、" c ")' --- 'main(String ...)を持つ' main(String []) ' ) '' Test.main(new String [] {"a"、 "b"、 "c"} ')を使用してもOK(Java 1.5.0 on OSX) –

+0

@Michael:はい、後者は確かに動作します。ここでは 'main'に特別なことは何もありません。他のvarargsメソッドと同じように動作します。 –

3

違いはありません。

通常、String... sは、区切り文字としてコンマで引数を渡すことができますが、String[] sには配列が必要です。 しかし、実装ではsは両方の場合に配列です。だから、ある意味では、...は結実砂糖です。

0

可変数の引数main(String... s)はJava 5.0でのみ導入されました。