java args array in main () method confusion (Nullprüfung) [duplizieren]

8

Ich bin bei etwas etwas verwirrt. Ich habe ein kleines Code-Snippet geschrieben.

%Vor%

Es ist ein einfacher Test. Obwohl ich nichts von der Befehlszeile übergebe als Argument aber immer noch args ist nicht null was bedeutet, dass JVM es initialisiert etwas wie String-Array. Warum ein bestimmter Grund dafür? Ich bin neugierig wissen. Alle Hinweise wären hilfreich. Vielen Dank, Ben

    
benz 10.09.2012, 20:00
quelle

6 Antworten

6

Wenn Sie nichts übergeben, ist args nicht null - es ist leer :

%Vor%     
dasblinkenlight 10.09.2012 20:01
quelle
4

Es ist semantisch. Wenn keine Argumente vorhanden sind, bedeutet dies, dass die Liste der Argumente leer ist. Das bedeutet nicht, dass Argumente nicht existieren. Daher ist die args -Liste ein leeres Array (d. H. Keine Argumente) anstelle einer Null (d. H. Argumente existieren nicht).

    
mprivat 10.09.2012 20:03
quelle
1

Ihre Überprüfung auf Null-Array ist nicht falsch, wenn nicht das Array args , das an die Funktion main eines Java-Programms übergeben wurde, jemals von der JVM selbst initialisiert wird, also wird das Array nie sein null, es könnte nur leer sein, aber nicht null. Die JVM garantiert, dass das Array args initialisiert wird. Die Überprüfung auf Null ist immer noch nicht falsch, aber es ist redundant und es hat nicht viel Sinn, vor allem hat es nicht den Sinn, den Sie ihm gegeben haben (keine Argumente auf der Kommandozeile übergeben).

Da das Array immer initialisiert wird, können Sie sicher sein, dass es nicht null ist und nur den leeren Check durchführen:

%Vor%

Und Sie können sogar direkt durch das Array iterieren, ohne sich über NullPointerException Gedanken machen zu müssen:

%Vor%     
aleroot 10.09.2012 20:11
quelle
1

Das Argument der Methode main besteht aus den String-Parametern, die von der Befehlszeile übergeben werden. Wenn keine übergeben wird, ist es nicht null , sondern hat eine Größe von 0. Probieren Sie einfach:

%Vor%

Sie können sehen, dass eine Ausnahme ausgelöst wird:

%Vor%     
arshajii 10.09.2012 20:03
quelle
0

Der jvm erstellt und übergibt alle Argumente als String [] namens "args". Dies ist (neben anderen Gründen) der Fall, damit wir nicht nach dem Argument args suchen müssen. Es ist eine kleine Sache, aber es spart eine kleine Menge Zeit.

    
Chris Moran 10.09.2012 20:03
quelle
0

überprüfe die Größe des args string arrays, wenn seine Null ist, als wenn nichts darin ist, und wenn die Größe größer als 1 ist, wenn etwas darin ist, versuche einen Haltepunkt zu setzen (wenn du IDE benutzt) oder Iterieren über Array, um den Inhalt des Arrays zu sehen.

    
Shahrukh A. 10.09.2012 20:04
quelle

Tags und Links