web-dev-qa-db-ja.com

JavaでのString []とString ...の違いは何ですか?

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

このような:

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

またはこのように:

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

実際にString[]String...の違いは何ですか?

24

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

String[]String...は内部的に同じものです。 e。、文字列の配列。違いは、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();

パラメーターを文字列配列として宣言する場合、[〜#〜] must [〜#〜]この方法で呼び出します。

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...を使用しても動作します。可変引数を使用する場合は、パラメーターとして配列を使用してメソッドを呼び出し、パラメータ自体はメソッド本体内の配列になります。

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

可変引数の詳細については、こちらをご覧ください: http://docs.Oracle.com/javase/1.5.0/docs/guide/language/varargs.html

37
davidbuzatto

String...String[]に変換されます。主な違いは、varargメソッドを2つの方法で呼び出すことができることです。

method(a, b, c);
method(new String[] {a, b, c});

一方、次のような配列を受け入れるメソッドを呼び出す必要があります。

method(new String[] {a, b, c});

mainメソッドの場合、違いはありません。

5
assylias

String[] argsは配列引数を取ります。

String... argsは、引数として任意の数の文字列を取り、それらから配列を作成します。

1
BenCole

例を通してその違いを理解してみましょう

mymethod(String... str)
   vs
mymethod(String []str)


メソッドgetidはint型の配列を取ります。

したがって、getIdメソッドを呼び出す場合、配列を渡す必要があります。
配列を渡すには、匿名配列を作成するか、単に最初に配列を作成して、次の例でこれを行うように渡します。

class test
{
    public void getid(int []i)
    {
      for(int value:i)
     {
      System.out.println(value);
     }
    }

    public static void main(String []arg)
    {
     int []data = {1,2,3,4,5}
     new test().getid(data);
    }
}

次に、トリプルドットを使用する-> mymethod(int ... i)

メソッドにはまだ配列が必要ですが、違いはメソッドに直接値を渡すことができ、「...」が自動的に配列に変換できることです
以下の例をご覧ください

class test
{
    public void getid(int ...i)
    {
    for(int value:i)
    {
    System.out.println(value);
    }
    }
    public static void main(String []arg)
    {
    new test().getid(1,2,3,4);
    }

}

「[]」の代わりに「...」を使用する利点
1)保存メモリ:-
例ではmymethod(int [])を使用
mainメソッド「Data []」で配列を作成すると、新しいオブジェクトが作成され、メモリ内にスペースが確保されます
メソッドを作成し、次のような引数を定義するとき:-
getid(int [])->これはメモリ内に別のオブジェクトを作成するので、メモリ内に互いに同じ2つのオブジェクトがあります。

2)「...」の使用中は何も渡すことができません
例2では、​​「getid」メソッドの呼び出し中に何も渡すことができず、エラーを出さずに機能します。これは、プログラムをより安定させるのに非常に役立ちます

.
.
.
    public static void main(String []arg)
    {
    new test().getid();
    }
.
.
.


しかし、「getid」メソッドを呼び出し、「[]」を使用中に引数を渡さなかった場合、コンパイル時にエラーが表示されます

0
JVD

String[]は文字列の配列です。したがって、Stringデータ型の多くの変数のコンテナー。例えば:

String[] strArray = new String[2];
str[0] = "Hello";
str[1] = "World";

String str = "Hello World";

これでクエリがクリアされることを願っています:)

0