Почему Float.parseFloat() выдает как NumberFormatException, так и NullPointerException, а Integer.parseInt() выдает только NumberFormatException?

Наткнулся на это, проверяя мой код обработки ошибок. Когда вы вызываете Integer.parseInt(null), Java выдает исключение NumberFormatException, тогда как Float.parseFloat(null) выдает исключение NullPointerException. См. также документацию для Плавать и Целое число.

Есть ли какая-то конкретная техническая или конструктивная причина этой разницы, или это просто историческая причуда?

вероятно, исторические причины. Я вижу, что Long ведет себя как Integer, а Double как Float, и что Double.parseDouble и Float.parseFloat были введены позже (java 1.2). Я считаю, что поведение Double и Float имеет больше смысла, поэтому неудивительно, что они были введены позже.

Eran 08.04.2019 10:00

Они оба могут делать и то, и другое, но поскольку NullPointerException является непроверенным исключением, его не нужно объявлять. Один парень сделал, другой нет.

user207421 08.04.2019 10:24

@ user207421 это не совсем так. Integer.parseInt(null) никогда не вызовет исключение NullPointerException, а создаст новое исключение NumberFormatException("null")

Datz 26.04.2019 07:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
9
3
300
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это определенно исторический артефакт.

Это несоответствие и связанные с ним проблемы с документацией несколько раз поднимались как ошибка Java на протяжении многих лет. Например:

В самом раннем из них инженеры Sun, которым было поручено решить эту проблему, написали следующее:

It is reasonable to expect the same exceptions to be thrown for null; however, these api's are very old and may not be able to be changed at this point.

Will consider for Tiger. [That was Java 5.0]

2002-12-03

Потом через год:

Since the exception behavior is long-standing and specified in the JavaDoc, it is impractical to change either method's behavior at this time. Closing as will not fix.

2003-10-21

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