Ist es das Standardverhalten für diesen Code einen Nullpointer zu werfen?
-
04-10-2019 - |
Frage
Ich habe ein großes Problem in einigen Bibliothek Code hatte, die ich auf eine einzige Aussage gemerkt haben:
System.out.println((String) null);
Ok, wird der Code nicht tatsächlich so aussehen, aber es ruft sicherlich println
mit einem Null-Argumente. Dadurch meine ganze applicaio verursacht einen unerwarteten NullPointerException
zu werfen.
Generell sollte diese Ausnahme unter diesen Umständen println
werfen, oder ist das Nicht-Standard-Verhalten aufgrund einer schlechten Umsetzung der out
Instanz?
Lösung
Die JVM von Sonne druckt einfach "null". Dies ist das angegebene Verhalten von PrintStream.print(String)
wenn ein null
Argument angegeben.
Andere Tipps
Ok, den Fehler gefunden, in meinem Plattform-Implementierung von PrintStream.print
. Ich denke, ich werde es mit den Entwicklern folgen zu lassen.
public void print(String s) {
// WHERE IS THE NULL CHECK??!
for(int i=0;i<s.length();i++) {
write(s.charAt(i));
}
}
Danke für die Bestätigung, dass dies tatsächlich nicht-Standardverhalten.
Das oben sollte nicht eine Ausnahme werfen. Sind Sie sicher, dass Sie nicht so etwas wie:
System.out.println(a.b);
wo a
ist null
?
Alternativ vielleicht Ihr System.out
wurde auf null gesetzt (nicht viele Leute wissen, dass Sie die out
/ err
Ströme einstellen können)?
Wenn ich versuche, diese Zeile auf Standard-Desktop-Java (Java SE 6 Update 20 auf Mac OS X), ist es nicht ein NullPointerException
wirft, ist es nur druckt null
.
Ich denke, dass ein NullPointerException
werfen ist ein Fehler in diesem Fall.
Ich habe gerade versucht, diese JDK auf Sonne läuft 6 und es funktionierte gut. Es gedruckt null, wie erwartet.