Почему 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");
}
Я бы предположил, что есть два разных автора.