[java] 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



답변

null에 대해 동일한 예외가 throw 될 것으로 예상하는 것이 합리적입니다. 그러나 이러한 API는 매우 오래되어이 시점에서 변경할 수 없습니다.

과:

예외 동작은 오래 지속되고 JavaDoc에 지정되어 있기 때문에 현재 두 메서드의 동작을 변경하는 것은 비현실적입니다. 해결되지 않는 것처럼 닫습니다.

출처 : 버그 보고서 : Integer.parseInt () 및 Double.parseDouble ()은 null에 대해 다른 예외를 throw합니다.

다른 사람들이 말한 것처럼 : 다른 저자가 만든 것 같습니다.


답변

참고 :이 게시물의 모든 내용은 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");
}

두 명의 다른 저자가 있다고 생각합니다.


답변