webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen String [] und String ... in Java?

Wie muss ich die main()-Methode in Java deklarieren?

So was:

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

Oder so:

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

Was ist eigentlich der Unterschied zwischen String[] und String..., falls vorhanden?

21

Wie muss ich die main () - Methode in Java deklarieren?

String[] und String... sind intern identisch, d. h. Ein Array von Strings . Der Unterschied ist, dass Sie bei Verwendung eines varargs-Parameters (String...) die Methode folgendermaßen aufrufen können:

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();

Und wenn Sie den Parameter als String-Array deklarieren, müssen Sie folgendermaßen aufrufen:

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" } );

Was ist eigentlich der Unterschied zwischen String[] und String... (falls vorhanden)?

Die Konvention ist die Verwendung von String[] als Hauptparameter der Methode. Die Verwendung von String... funktioniert jedoch auch, da Sie die Methode auf die gleiche Weise aufrufen können, wie Sie eine Methode mit einem Array als Parameter aufrufen. Der Parameter selbst ist ein Array der Methodenkörper.

Eine wichtige Sache ist, dass, wenn Sie einen Vararg verwenden, dieser der letzte Parameter der Methode sein muss und Sie nur einen Vararg-Parameter haben können.

Weitere Informationen zu varargs finden Sie hier: http://docs.Oracle.com/javase/1.5.0/docs/guide/language/varargs.html

33
davidbuzatto

String... wird in einen String[] konvertiert. Der Hauptunterschied besteht darin, dass Sie eine Vararg-Methode auf zwei Arten aufrufen können:

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

sie müssen jedoch eine Methode aufrufen, die ein Array wie folgt akzeptiert:

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

Bei der main-Methode macht es keinen Unterschied.

5
assylias

String[] args nimmt ein Array-Argument an.

String... args nimmt eine beliebige Anzahl von Zeichenfolgen als Argument und erstellt daraus ein Array.

1
BenCole

Lasst uns den Unterschied anhand eines Beispiels verstehen und es ist sehr einfach 

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


Methode getid nimmt ein Array vom Typ int. 

Wenn wir also die getId-Methode aufrufen, müssen wir array übergeben.
Um ein Array zu übergeben, können Sie ein anonymes Array erstellen oder einfach nur ein Array erstellen und weitergeben, wie ich es im Beispiel unten getan habe. 

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);
    }
}

Jetzt unten verwenden wir Triple Dot -> Mymethod (int ... i) 

jetzt benötigt die Methode immer noch das Array, aber der Unterschied ist jetzt, dass wir einen direkten Wert an diese Methode übergeben können und "..." sie automatisch in das Array konvertieren
siehe beispiel unten 

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);
    }

}

Vorteil der Verwendung von "..." anstelle von "[]"
1) Sein Speichergedächtnis: - 
in Beispiel eins mit mymethod (int []) 
Wenn Sie ein Array in der Hauptmethode "Data []" erstellen, erstellen Sie ein neues Objekt und erhalten dort Speicherplatz 
sowie wann wir Methoden erstellen und dort Argumente definieren wie: - 
getid (int []) -> dies erstellt ein anderes Objekt in einem Speicher, so dass sich 2 Objekte in einem Speicher befinden, der einander gleich ist

2) Sie können nichts übergeben, während Sie "..." Verwenden.
In Beispiel 2 können Sie nichts übergeben, während Sie die "getid" -Methode aufrufen. Sie funktionieren ohne Fehler, was sehr hilfreich ist, um ein Programm beispielsweise stabiler zu machen 

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


Wenn wir jedoch die Methode "getid" aufrufen und während der Verwendung von "[]" keine Argumente übergeben, wird der Fehler zum Zeitpunkt der Kompilierung angezeigt 

0
JVD

String[] ist ein Array von Strings. Daher ein Container mit vielen Variablen des Datentyps String. Zum Beispiel:

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

String str = "Hello World";

Hoffe das klärt deine Fragen :)

0