Akan null instanceof SomeClass
kembali false
atau melempar NullPointerException
?
java
nullpointerexception
null
Johan Lübcke
sumber
sumber
Jawaban:
Tidak, pemeriksaan nol tidak diperlukan sebelum menggunakan instanceof.
Ekspresi
x instanceof SomeClass
adalahfalse
jikax
ininull
.Dari Spesifikasi Bahasa Jawa, bagian 15.20.2, "Ketikkan instance operator perbandingan" :
Jadi jika operan adalah nol, hasilnya salah.
sumber
try it
karena perilaku saat ini tidak sama dengan perilaku yang dijamin .Effective Java
- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683instanceof
adalah bagian dari Java 1.0, dirilis hampir 20 tahun yang lalu. Mengubah perilaku sekarang dengan cara yang akan merusak kode yang ada tidak mungkin, tidak ada manfaat yang melebihi biaya yang sangat besar. Dua puluh tahun yang lalu, mungkin ada argumen untuk mengembalikan true jika argumen itu bisa dilemparkan, atau melemparkan pengecualian untuk argumen nol. Tetapi definisi-definisi itu akan membutuhkan pemeriksaan nol yang terpisah.Menggunakan referensi nol sebagai operan pertama yang
instanceof
kembalifalse
.sumber
Pertanyaan yang sangat bagus. Saya hanya mencoba sendiri.
Cetakan
JLS / 15.20.2. Ketik Contoh Operator Perbandingan
API / Kelas # isInstance (Object)
sumber
s
hanyalah variabel referensi objek. Ini dapat merujuk objek yang sebenarnya ada (""
) atau merujuknull
referensi (yang) literal.null
bukan data string, apa pun variabel yang menunjukkannya.s instanceof String
tidak sama denganfield.getType().equals(String.class)
, misalnya.s instanceof String
tersebuts
akan diganti dengan nilai yang sebenarnya, sehingga akan menjadi"" instanceof String
dannull instanceof String
. Memikirkannya seperti ini mungkin lebih masuk akal.Tidak, tidak.
instanceof
akan kembalifalse
jika operan pertamanya adalahnull
.sumber
Sama seperti berita gembira :
Bahkan akan kembali .
(
((A)null)
instanceof A)
false
(Jika pengetikan
null
tampak mengejutkan, terkadang Anda harus melakukannya, misalnya dalam situasi seperti ini:Jadi
Test.test((A)null)
akan dicetaka instanceof A: false
.)PS: Jika Anda sedang merekrut, jangan gunakan ini sebagai pertanyaan wawancara kerja. : D
sumber
Tidak ada . Java literal
null
bukan turunan dari kelas mana pun. Oleh karena itu tidak dapat menjadi instance dari kelas mana pun.instanceof
akan mengembalikan salah satufalse
atautrue
karena itu<referenceVariable> instanceof <SomeClass>
pengembalianfalse
ketikareferenceVariable
nilai nol.sumber
The
instanceof
operator tidak perlu eksplisitnull
cek, karena tidak melemparNullPointerException
jika operan adalahnull
.Pada saat run time, hasil dari
instanceof
operator adalah benar jika nilai ekspresi relasional tidaknull
dan referensi dapat dilemparkan ke tipe referensi tanpa menaikkan pengecualian pemeran kelas.Jika operan
null
,instanceof
operator kembalifalse
dan karenanya, tidak diperlukan pemeriksaan eksplisit.Perhatikan contoh di bawah ini,
Penggunaan yang benar
instanceof
adalah seperti yang ditunjukkan di bawah ini,sumber