Est-ce un comportement standard pour ce code pour une NullPointerException?
-
04-10-2019 - |
Question
J'ai eu un gros problème dans un code bibliothèque, que je l'ai épinglé à une seule instruction:
System.out.println((String) null);
Ok, le code ne semble pas vraiment comme ça, mais il appelle certainement println
avec un argument null. Faire cela fait tout mon applicaio de jeter un NullPointerException
inattendu.
En général, devrait println
jeter cette exception dans cette circonstance, ou est-ce comportement non standard en raison d'une mauvaise mise en œuvre de l'instance out
?
La solution
La machine virtuelle Java d'impressions de soleil simplement « null ». Ce comportement est spécifié de PrintStream.print(String)
quand donné un argument null
.
Autres conseils
Ok, a trouvé l'erreur, dans la mise en œuvre de PrintStream.print
de ma plate-forme. Je suppose que je vais suivre avec les développeurs.
public void print(String s) {
// WHERE IS THE NULL CHECK??!
for(int i=0;i<s.length();i++) {
write(s.charAt(i));
}
}
Merci de confirmer que ce comportement est en effet non standard.
Ce ci-dessus ne doit pas jeter une exception. Etes-vous sûr que vous n'avez pas quelque chose comme:
System.out.println(a.b);
où a
est null
?
Sinon, peut-être votre System.out
a été mis à zéro (pas beaucoup de gens se rendent compte que vous pouvez définir les flux out
/ err
)?
Lorsque je tente cette ligne sur le bureau Java standard (Java SE 6 update 20 sous Mac OS X), il ne jette pas un NullPointerException
, il imprime juste null
.
Je pense que jeter un NullPointerException
est un bug dans ce cas.
Je viens d'essayer d'exécuter ce sur jdk de soleil 6 et il fonctionnait très bien. Il imprimé null comme prévu.