String x = (String) null;
Mengapa tidak ada pengecualian dalam pernyataan ini?
String x = null;
System.out.println(x);
Mencetak null
. Tetapi .toString()
metode harus membuang pengecualian pointer nol.
String x = (String) null;
Mengapa tidak ada pengecualian dalam pernyataan ini?
String x = null;
System.out.println(x);
Mencetak null
. Tetapi .toString()
metode harus membuang pengecualian pointer nol.
Jawaban:
Anda dapat menggunakan
null
tipe referensi apa pun tanpa mendapatkan pengecualian.The
println
metode tidak membuang nol pointer karena cek dulu apakah objek tersebut adalah null atau tidak. Jika null maka itu hanya mencetak string"null"
. Kalau tidak, ia akan memanggiltoString
metode objek itu.Menambahkan rincian lebih lanjut: Metode pencetakan metode panggilan internal
String.valueOf(object)
pada objek input. Dan dalamvalueOf
metode, pemeriksaan ini membantu menghindari pengecualian null pointer:Untuk sisa kebingungan Anda, memanggil metode apa pun pada objek nol harus membuang pengecualian pointer nol, jika bukan kasus khusus.
sumber
Anda dapat menggunakan
null
tipe referensi apa pun. Anda juga dapat memanggil metode yang menanganinull
sebagai argumen, misalnyaSystem.out.println(Object)
, tetapi Anda tidak bisa mereferensikannull
nilai dan memanggil metode.BTW Ada situasi sulit di mana Anda bisa memanggil metode statis pada
null
nilai.sumber
t.yield() -> Thread.yeld()
? Mirip dengan bagaimanafinal int i = 1; while (i == 1)
dioptimalkan untukwhile(true)
Ini dengan desain. Anda dapat menggunakan
null
tipe referensi apa pun. Kalau tidak, Anda tidak akan dapat menetapkannya ke variabel referensi.sumber
Casting nilai null diperlukan untuk mengikuti konstruksi di mana metode kelebihan beban dan jika nol dilewatkan ke metode kelebihan beban ini maka kompiler tidak tahu cara menghapus ambiguitas maka kita perlu mengetikkan nol dalam kasus ini:
Kalau tidak, Anda tidak dapat memanggil metode yang Anda butuhkan.
sumber
String bar = null;
melemparkannull
nilai keString
. Sejauh ini saya hanya perlu memberikan null secara eksplisit dalam tes di mana metode kelebihan beban dan saya ingin menguji perilakunya dengan input nol. Namun, baik untuk mengetahui, saya akan menulis jawaban yang sama sebelum saya menemukan jawaban Anda.l instanceof Long
dans instanceof String
akan kembalifalse
dalam kasus ini.Println(Object)
menggunakanString.valueOf()
Print(String)
tidak memeriksa nol.sumber
Banyak jawaban di sini sudah disebutkan
dan
Saya bertanya-tanya di mana itu ditentukan dan mencarinya di Spesifikasi Java:
Referensi nol selalu dapat ditetapkan atau dilemparkan ke jenis referensi apa pun (§5.2, §5.3, §5.5).
Jika referensi adalah nol, itu dikonversi ke string "null" (empat karakter ASCII n, u, l, l).
sumber
Seperti yang ditulis orang lain, Anda dapat membatalkan semua hal. Biasanya, Anda tidak membutuhkan itu, Anda dapat menulis:
tanpa meletakkan gips di sana.
Tetapi ada saat-saat di mana pemain seperti itu masuk akal:
a) jika Anda ingin memastikan bahwa metode tertentu dipanggil, seperti:
maka itu akan membuat perbedaan jika Anda mengetik
b) jika Anda bermaksud menggunakan IDE untuk menghasilkan kode; misalnya saya biasanya menulis tes unit seperti:
Saya sedang melakukan TDD; ini berarti bahwa kelas "MyClassUnderTest" mungkin belum ada. Dengan menuliskan kode itu, saya kemudian dapat menggunakan IDE saya untuk pertama-tama menghasilkan kelas baru; dan kemudian menghasilkan konstruktor yang menerima argumen "Apa pun" "di luar kotak" - IDE dapat memperkirakan dari pengujian saya bahwa konstruktor harus mengambil tepat satu argumen dari tipe Apa pun.
sumber
Cetak :
Nilai dari :
Itu hanya akan mengembalikan string dengan nilai "null" ketika objek tersebut
null
.sumber
Ini sangat berguna ketika menggunakan metode yang seharusnya tidak jelas. Sebagai contoh: JDialog memiliki konstruktor dengan tanda tangan berikut:
Saya perlu menggunakan konstruktor ini, karena saya ingin mengatur GraphicsConfiguration, tetapi saya tidak memiliki orang tua untuk dialog ini, jadi argumen pertama harus nol. Menggunakan
ambigu, jadi dalam hal ini saya dapat mempersempit panggilan dengan memberikan null ke salah satu jenis yang didukung:
sumber
Fitur bahasa ini nyaman dalam situasi ini.
Jika memberHashMap.get ("Name") mengembalikan null, Anda tetap menginginkan metode di atas mengembalikan null tanpa melempar pengecualian. Tidak peduli apa kelasnya, nol adalah nol.
sumber