Это стандартное поведение для этого кода, чтобы бросить NullPointerException?
-
04-10-2019 - |
Вопрос
У меня была большая проблема в каком-то библиотечном коде, который я приказал в одно утверждение:
System.out.println((String) null);
Хорошо, код на самом деле не похож на это, но это, безусловно, звонит println
с нулевым аргументом. Это приводит к тому, что мой приход, чтобы бросить неожиданное NullPointerException
.
В общем, следует println
брось это исключение в этом обстоятельство или это нестандартное поведение из-за плохой реализации out
пример?
Решение
JVM от солнца печатает просто «ноль». Это указанное поведение PrintStream.print(String)
когда дано А. null
аргумент
Другие советы
ОК, нашел ошибку, в реализации моей платформы PrintStream.print
. Отказ Я думаю, я буду следить за этим с разработчиками.
public void print(String s) {
// WHERE IS THE NULL CHECK??!
for(int i=0;i<s.length();i++) {
write(s.charAt(i));
}
}
Спасибо за подтверждение того, что это действительно нестандартное поведение.
Это выше не должно бросать исключение. Вы уверены, что у вас нет чего-то вроде:
System.out.println(a.b);
куда a
является null
?
В качестве альтернативы, возможно, ваш System.out
был установлен на NULL (не многие люди понимают, что вы можете установить out
/err
потоки)?
Когда я попробую эту строку на стандартном рабочем столе Java (Java SE 6 обновление 20 на Mac OS X), он не бросает NullPointerException
, Он просто печатает null
.
Я думаю, что бросает NullPointerException
это ошибка в этом случае.
Я только что попытался запустить это на Sun's JDK 6, и он работал просто хорошо. Это напечатало нулевой, как ожидалось.