Warum sieht meine Methode kein Null-Objekt?

7

Ich verstehe das nicht.

%Vor%

Zu meiner Überraschung wird I am not null auf der Konsole gedruckt. Warum wird in myMethod der übergebene Parameter obj nicht als null angezeigt.

    
Uchenna Nwanyanwu 02.10.2013, 18:58
quelle

4 Antworten

13

Die Methodensignatur Object... objArr führt eine Variable "varargs" ein. Jedes Argument, das bei einem Aufruf einer solchen Methode übergeben wird, erhält einen eigenen Slot in einem Array dieses Namens.

Wenn Sie also ein null übergeben, erhalten Sie ein Array objArr der Länge 1, dessen einziges Element null ist. Das Array selbst ist nicht null, das Element ist.

Die JLS, Abschnitt 8.4.1 ruft diese "variablen Arityparameter" auf:

  

Der letzte formale Parameter einer Methode oder eines Konstruktors ist speziell: it   kann ein variabler Arity-Parameter sein, der durch eine Ellipsenfolge angegeben wird   der Typ.

und

  

Aufrufe einer Variablenaritätsmethode können tatsächlichere enthalten   Argumentausdrücke als formale Parameter. Das ganze eigentliche Argument   Ausdrücke, die nicht den vorhergehenden formalen Parametern entsprechen   Der Parameter variable arity wird ausgewertet und die Ergebnisse gespeichert   in ein Array , das an den Methodenaufruf übergeben wird   (§15.12.4.2).

(Betonung meiner)

    
rgettman 02.10.2013, 19:00
quelle
6

Eine Methode mit einer Parameterliste wie Object... objArr benötigt einen Array-Parameter. Wenn Sie es von main aufrufen, ist der Parameter ein Array mit einem Element. Das einzige Element, objArr[0] , wird null sein. Aber das Array selbst ist nicht null.

Selbst wenn Sie die Methode ohne Argumente aufrufen, d. h. myMethod() , ist das Array immer noch nicht null. Es wird ein Array der Länge 0 sein.

    
ajb 02.10.2013 19:00
quelle
0

Das Array objArr wird nicht null sein, wenn Sie beim Aufruf dieser Funktion ein Argument obj von main übergeben. obj ist null, aber das Array enthält dieses null-Element, was bedeutet, dass das Array die Größe 1 hat und nicht null ist.

    
Nikhil 02.10.2013 19:02
quelle
0
%Vor%

AUSGABE - & gt;

%Vor%

objArr verhält sich wie args in main (String [] Argumente ) und wenn Sie versuchen objArr [1] wird es eine Ausnahme werfen Bedeutung objArr ist fast ein Array

    
Srinath Ganesh 02.10.2013 19:07
quelle

Tags und Links