Это стандартное поведение для этого кода, чтобы генерировать исключение NullPointerException?
У меня была большая проблема в некотором библиотечном коде, который я связал с одним утверждением:
System.out.println((String) null);
Хорошо, код на самом деле не выглядит так, но он, безусловно, вызывает println
с нулевым аргументом. Это заставляет мое приложение бросать неожиданные NullPointerException
,
В общем, следует println
бросить это исключение при таких обстоятельствах, или это нестандартное поведение из-за плохой реализации out
пример?
5 ответов
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
был установлен на ноль (не многие люди понимают, что вы можете установить out
/err
Потоки)?
Когда я пробую эту строку на стандартном настольном Java (Java SE 6, обновление 20 в Mac OS X), он не выдает NullPointerException
он просто печатает null
,
Я думаю, что бросали NullPointerException
это ошибка в этом случае.
Я просто попытался запустить это на Sun JDK 6, и он работал просто отлично. Он печатал ноль, как и ожидалось.