Это стандартное поведение для этого кода, чтобы генерировать исключение 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, и он работал просто отлично. Он печатал ноль, как и ожидалось.

Другие вопросы по тегам