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.
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)
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.
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
Tags und Links java