Varargs mit Nullparametern in Java

8

Der folgende Code verwendet einfach eine Nullreferenz als Varargs-Parameter.

%Vor%

Der erste Aufruf der Methode temp(null, null); zeigt an [null, null] bedeutet, dass str[0]=null und str[1]=null .

, aber der spätere Aufruf von temp(null); bewirkt, dass die NullPointerException ausgelöst wird, die aussieht, als wäre str selbst null .

Wenn der Typ in String wie etwa temp((String)null); umgewandelt wird, funktioniert es und zeigt [null] an.

Warum ist beim letzten Aufruf eine explizite Typumwandlung erforderlich? Es scheint mir, dass es sich um ein String-Array mit einer null -Referenz handelt, die sich vom ersten Aufruf unterscheidet. Was ist die richtige Antwort?

    
Tiny 13.10.2012, 04:43
quelle

1 Antwort

12
  

Es scheint mir, dass es sich um ein String-Array mit einer Null handelt   Referenz, die sich vom ersten Aufruf unterscheidet

Genau. Das ist was passiert.

Eigentlich geht es nur um precedence zwischen: - exact-match , var-args , boxing und type-casting .

Der Compiler folgt der folgenden Rangfolge, wenn nach Methoden gesucht wird, die aufgerufen werden sollen oder wie das Argument übergeben wird: -

  

Genau passend & gt; Typ-Cast & gt; Boxen & gt; Var-Argumente

Sie können also sehen, dass var-args die niedrigste Priorität hat und exact-match die höchste Priorität hat. Das heißt, wenn ein argument % good-enough für ein exact-match ist, wird dies als solches betrachtet.

Wenn Sie nun null als Argument übergeben, kann null direkt an den Parameter var-args als value of reference übergeben werden. Es ist ein exact match für den Parameter.
Also müssen Sie typecast explizit auf String setzen, um zu sagen, dass dies tatsächlich das erste Element Ihres var-args -Parameters

ist

Im Fall von null, null wird dies als two Elemente von var-args verwendet. Es kann kein value of reference sein.

    
Rohit Jain 13.10.2012, 04:48
quelle

Tags und Links