1. ホーム
  2. java

[解決済み] JavaにおけるString[]とString...の違いは何ですか?

2022-03-04 15:25:16

質問

をどのように宣言すればよいのでしょうか? main() メソッドを作成する方法を教えてください。

こんな感じで。

public static void main(String[] args)
{
    System.out.println("foo");
}

あるいはこんな感じ。

public static void main(String... args)
{
    System.out.println("bar");
}

とは、実際にはどのような違いがあるのでしょうか? String[]String... があれば教えてください。

解決方法は?

<ブロッククオート

Javaでmain()メソッドをどのように宣言すればよいですか?

String[]String... は内部的には同じもの、つまりStringの配列です。 違いは、varargs パラメータを使用した場合 ( String... のようにメソッドを呼び出すことができます。

public void myMethod( String... foo ) {
    // do something
    // foo is an array (String[]) internally
    System.out.println( foo[0] );
}

myMethod( "a", "b", "c" );

// OR
myMethod( new String[]{ "a", "b", "c" } );

// OR without passing any args
myMethod();

そして、パラメータをString配列として宣言すると 必須 はこのように呼び出します。

public void myMethod( String[] foo ) {
    // do something
    System.out.println( foo[0] );
}

// compilation error!!!
myMethod( "a", "b", "c" );

// compilation error too!!!
myMethod();

// now, just this works
myMethod( new String[]{ "a", "b", "c" } );

とは、実際には何が違うのでしょうか? String[]String ...もしあれば?

規約では String[] をメインメソッドのパラメータとして使用しますが String... varargs を使用すると、パラメータに配列を指定してメソッドを呼び出すのと同じように、 パラメータ自体もメソッド本体の中で配列になるので、これも動作します。

重要なことは、vararg を使用する場合、それはメソッドの最後のパラメータである必要があり、vararg パラメータは 1 つだけ持つことができるということです。

バラグについては、こちらで詳しく解説しています。 http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html