Почему Double.parseDouble(null) и Integer.parseInt(null) генерируют разные исключения?

Почему Double.parseDouble(null) и Integer.parseInt(null) генерируют разные исключения?

Это историческая катастрофа или преднамеренная? В документации четко указаны два типа исключений для Double.parseDouble(...) и один для Integer.parseInt(), но это кажется непоследовательным:

Integer.parseInt(null); // throws java.lang.NumberFormatException: null

Однако

Double.parseDouble(null); // throws java.lang.NullPointerException

Ответ 1

Разумно ожидать, что те же исключения будут выброшены за нуль; однако эти api очень старые и не могут быть изменены в этот момент.

и

Поскольку поведение исключения является давним и указано в JavaDoc, в настоящее время нецелесообразно изменять поведение метода. Закрытие, так как не будет исправлено.

Как взято из: Отчет об ошибках: Integer.parseInt() и Double.parseDouble() выставляют разные исключения в null.

Как и другие, вы сказали: вероятно, это сделали разные авторы.

Ответ 2

Примечание: все в этом сообщении находится в источнике Java7-b147

Double.parseDouble() переходит в библиотеку Sun (в sun.misc.FloatingDecimal) первое, что происходит, это:

in = in.trim(); // don't fool around with white space.
                // throws NullPointerException if null

Integer.parseInt() выполняется вручную в классе Integer. Первое, что происходит, это:

if (s == null) {
    throw new NumberFormatException("null");
}

Я бы предположил, что есть два разных автора.