Mengapa Double.parseDouble (null) dan Integer.parseInt (null) memunculkan pengecualian yang berbeda?
Apakah ini kecelakaan bersejarah atau disengaja? Dokumentasi dengan jelas menyatakan dua jenis pengecualian untuk Double.parseDouble(...)
dan satu untuk Integer.parseInt()
, tetapi tampaknya tidak konsisten:
Integer.parseInt(null); // throws java.lang.NumberFormatException: null
Namun
Double.parseDouble(null); // throws java.lang.NullPointerException
double
primitifparseDouble
tidak melakukan pemeriksaan null, dan hanya melempar NPE ketika ditemukan, tetapi masukparseInt
, maka string masukan akan diperiksanull
. Saya tidak dapat melihat alasan yang bagus mengapa mereka harus berperilaku berbeda.Jawaban:
Dan:
Seperti yang diambil dari: Bug Report: Integer.parseInt () dan Double.parseDouble () memberikan pengecualian berbeda pada null.
Seperti yang dikatakan orang lain: Kemungkinan dibuat oleh penulis yang berbeda.
sumber
Catatan: semua yang ada di posting ini ada di sumber Java7-b147
Double.parseDouble()
masuk ke perpustakaan Sun (dalamsun.misc.FloatingDecimal
) hal penting pertama yang terjadi adalah:in = in.trim(); // don't fool around with white space. // throws NullPointerException if null
Integer.parseInt()
dilakukan secara manual diInteger
kelas. Hal penting pertama yang terjadi adalah:if (s == null) { throw new NumberFormatException("null"); }
Saya rasa ada dua penulis yang berbeda.
sumber