33

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

このような:

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

またはこのように:

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

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

4

5 に答える 5

56

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

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 を使用すると、配列をパラメーターとしてメソッドを呼び出すのと同じ方法でメソッドを呼び出すことができ、パラメーター自体がメソッド内の配列になるためです。体。

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

ここで可変引数の詳細を読むことができます: http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

于 2012-08-15T16:49:35.457 に答える
5

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

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

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

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

メソッドについてはmain、違いはありません。

于 2012-08-15T16:49:46.943 に答える
4

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

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

于 2012-08-15T16:49:55.463 に答える
1

例とその超簡単な違いを理解しましょう

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 [ ] )
を使用する例では、メイン メソッド " Data[] " で配列を作成すると、新しいオブジェクトが作成され、取得されます。
メソッドを作成してそこに引数を定義するときと同様に、メモリ内にスペースがあります:-
getid(int []) -> これによりメモリ内に別のオブジェクトが作成されるため、メモリ内に互いに同じ2つのオブジェクトがあります

2) 「...」を使用している間は何も渡すことができません
例2では、​​「getid」メソッドを呼び出すときに何も渡すことができず、エラーを発生させることなく動作します。これは、たとえばプログラムをより安定させるのに非常に役立ちます

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


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

于 2018-02-13T11:37:00.797 に答える
0

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

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

String str = "Hello World";

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

于 2016-04-07T12:47:36.230 に答える