Saya memiliki dua variabel objek berikut
Date a;
Date b=null;
Jelas 'a' dan 'b' tidak mengacu pada objek apa pun.
Sekarang jika saya memohon pernyataan berikut
System.out.println(a.toString());
Akan ada kesalahan waktu kompilasi, sedangkan jika saya menjalankan pernyataan berikut
System.out.println(b.toString());
Tidak akan ada kesalahan waktu kompilasi tetapi akan ada kesalahan runtime. Apa alasannya dan nilai apa yang sebenarnya disimpan dalam 'b' untuk mewakili nilai nol?
Jawaban:
Itu karena keadaan variabel lokal dikendalikan dalam ruang lingkupnya
Yang tidak berlaku untuk bidang
Sekarang, mengapa tidak masalah untuk mengatur variabel ke nol dan menggunakannya segera? mungkin itu adalah kesalahan historis yang terkadang mengarah pada kesalahan mengerikan
Sekarang apa perbedaan semantiknya?
hanya mendeklarasikan variabel yang dapat menyimpan referensi yang menunjuk ke objek bertipe
Date
, namuntidak persis sama tetapi referensi menunjuk ke nol kali ini, nol seperti referensi apa pun, dibutuhkan spasi dari penunjuk asli, yaitu 4 byte pada mesin 32-bit dan 8 byte pada mesin 64-bit
sumber
Tidak ada perbedaan untuk bidang kelas. Mereka secara
null
default untuk objek, 0 untuk nilai numerik danfalse
untuk boolean.Untuk variabel yang dideklarasikan dalam metode - Java mengharuskan mereka untuk diinisialisasi. Tidak menginisialisasi mereka menyebabkan kesalahan waktu kompilasi ketika mereka diakses.
Apa alasannya? Bidang kelas dapat dimodifikasi dengan metode apa pun. Dalam urutan apa pun metode ini dipanggil. Semua bidang non-pribadi dapat dimodifikasi oleh kelas lain dan / atau kelas yang memperluas kelas itu. Oleh karena itu, tidak ada gunanya memberitahukan tentang variabel yang tidak diinisialisasi, karena mungkin ditugaskan di banyak tempat.
Variabel di dalam metode, bagaimanapun, adalah lokal dan dapat dimodifikasi hanya di dalam metode itu sendiri. Karena itu adalah mungkin dan rasional untuk menunjukkan kemungkinan kesalahan. Dan kompiler mencoba melakukannya. Jika ia tahu bidang tidak diinisialisasi, itu akan menampilkan kesalahan, karena itu tidak pernah seperti yang Anda inginkan. Jika tidak yakin - itu akan memberi peringatan, sehingga Anda bisa memastikan.
sumber