Il y a beaucoup de surchargés String.valueOf
méthodes en Java. De plus, en Java, null
a toute et tous les types de sorte que quoi que ce soit (ce n'est pas une primitive) peuvent être null
.
Ainsi, lorsque vous appelez (String.valueOf((Object)null)
vous appelez l' valueOf
méthode qui prend un Object
que de l'utilisation de convertir explicitement null
de Object
.
Dans le deuxième exemple, vous ne sont pas explicitement exprimés l' null
d'un type particulier donc, en fait, vous appelez l' valueOf
méthode de char[]
qui jette un NPE.
À partir de la JLS §15.12.2
La deuxième étape des recherches du type déterminé dans l'étape précédente pour
membre des méthodes. Cette étape utilise le nom de la méthode et les types de
l'argument des expressions pour localiser des méthodes qui sont à la fois accessibles
et applicable, qui est, les déclarations qui peuvent être correctement appelé sur
les arguments donnés.
Il peut y avoir plus d'une telle méthode, auquel cas les plus
spécifique est choisi. Le descripteur (signature plus le type de retour) de
le plus spécifique de la méthode est celle utilisée au moment de l'exécution pour exécuter la méthode
de l'expédition.
Dans ce cas - char[]
est plus spécifique que l' Object
il est appelé lorsque aucun cast explicite de l' null
est faite.