2015-06-20 16 views
6

Was ist der Unterschied zwischen String... args und String[] args in Java?Gibt es einen Unterschied zwischen String ... args und String [] args in Java?

Ich bin neu in Java-Programmierung. Kann mir jemand plz sagen, was ist der Unterschied zwischen (String....args) & (String [] args) Wenn ich zuerst an Stelle der zweiten ....... verwenden wird macht es einen Unterschied?

String... args deklariert eine Methode, die eine variable Anzahl von String-Argumenten erwartet. Die Anzahl der Argumente kann alles sein: einschließlich Null.

String[] args und das Äquivalent String args[] deklarieren eine Methode, die genau ein Argument erwartet: ein Array von Strings.

Ein Unterschied, der aus diesen Beobachtungen möglicherweise nicht hervorgeht, ist, dass im zweiten Fall (aber nicht der erste) der Aufrufer einen Verweis auf das Array haben kann. In beiden Fällen arbeitet die Methode mit Argumenten als Array von Strings, aber wenn sie Dinge wie die Array-Elemente vertauscht, ist dies für den Aufrufer nicht sichtbar, wenn das Formular String... args verwendet wird.

+1

Dies ist eine gute Frage, aber es sieht so aus, als ob es schon oft gefragt wurde. Siehe http://stackoverflow.com/questions/301563/difference-fnstring-args-vs-fnstring-args – hungryghost

Antwort

7

Es gibt keinen Unterschied. Und String... args ist erlaubt.

JLS-12.1.4. Invoke Test.main sagt (teilweise)

Die Methode main public deklariert werden müssen, static und void. Er muss einen formalen Parameter (§8.4.1) angeben, dessen deklarierter Typ das Array String ist. Daher eine der folgenden Erklärungen akzeptabel ist:

public static void main(String[] args) 


public static void main(String... args) 

nicht explizit aufgeführt (aber auch erlaubt)

public static void main(String args[]) 
+0

Ich würde einfach die letzte Form einwerfen, obwohl technisch erlaubt und gültig, dass die 'String []' Form ist im Allgemeinen vorzuziehen, da die Klammern angeben, dass der tatsächliche Parametertyp "String []" ist und der Parametername eine Referenz auf ein Objekt vom Typ 'String []' ist.Mehr von einer Präferenz der Konvention Ich denke ... –

1

Im Haupt Methode gibt es sehr wenig Unterschied, Sie werden beide auf die gleiche Weise arbeiten.

String ... ist bekannt als Varargs. Die Oberseite zu varargs ist es sehr netter syntaktischer Zucker, der Sie Argumente für einen Methodenaufruf unbegrenzt definieren lässt. Im varargs der Methode wird die Methode genau wie ein Array des Typs behandelt.

Der Nachteil von Varargs ist, dass Java die unbestimmten Argumente in ein neues Array umwandelt und so Müll erzeugt. Als Alternative können Sie das Überladen von Methoden verwenden, um Varargs zu emulieren, wenn die Erstellung von Müll 0 sein muss.

14

Wenn Sie void x(String...args) Methode haben, können Sie es als x("1", "2", "3") anrufen, während void x(String[] args) kann nur als x(new String[] {"1", "2", "3"}) aufgerufen werden.

+0

Dies ist die beste Antwort. Es zeigt deutlich den Unterschied in der Syntax/Verwendung. – hungryghost

+0

@hungryghost OP fragte speziell nach 'main' (und markierte sogar die Frage [tag: main]). –

+0

@ElliottFrisch, die Frage selbst erwähnt 'main' nicht, obwohl ich sehe, dass es so getaggt ist. 'String ... args' vs' String [] args' ist wirklich mehr eine allgemeine Java-Frage, aber wenn das OP sich speziell über main Gedanken macht, spricht Ihre Antwort das gut an. Ich werde deine auch aufwerten (auch wenn die ganze Frage zu Beginn eine duplex ist)! ;) – hungryghost

Verwandte Themen