Это стандартное поведение для этого кода, чтобы вызвать исключение NullPointerException? - PullRequest
1 голос
/ 22 мая 2010

У меня была большая проблема в некотором библиотечном коде, которую я связал с одним утверждением:

System.out.println((String) null);

Хорошо, код на самом деле не выглядит так, но он, безусловно, вызывает println с нулевым аргументом. Это заставляет мое приложение бросать неожиданный NullPointerException.

В общем случае println должно вызывать это исключение при таких обстоятельствах или это нестандартное поведение из-за плохой реализации экземпляра out?

Ответы [ 5 ]

3 голосов
/ 22 мая 2010

JVM солнечных отпечатков просто "ноль". Это заданное поведение PrintStream.print(String) при задании аргумента null.

2 голосов
/ 22 мая 2010

Хорошо, обнаружил ошибку в реализации моей платформы PrintStream.print. Я предполагаю, что я свяжусь с разработчиками.

public void print(String s) {
    // WHERE IS THE NULL CHECK??!
    for(int i=0;i<s.length();i++) {
        write(s.charAt(i));
    }
}

Спасибо за подтверждение того, что это действительно нестандартное поведение.

1 голос
/ 22 мая 2010

Это выше не должно бросать исключение. Вы уверены, что у вас нет что-то вроде:

System.out.println(a.b);

, где a равно null?

В качестве альтернативы, возможно, ваш System.out был установлен в ноль (не многие люди понимают, что вы можете установить потоки out / err)?

0 голосов
/ 22 мая 2010

Я только что попытался запустить это на Sun JDK 6, и он работал просто отлично.Он печатал ноль, как и ожидалось.

0 голосов
/ 22 мая 2010

Когда я пробую эту строку на стандартном настольном компьютере Java (Java SE 6, обновление 20 в Mac OS X), он не выдает NullPointerException, он просто печатает null.

Я думаю, что выбрасывание NullPointerException в данном случае является ошибкой.

...