Baca klarifikasi untuk kode berikut:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Ini akan mencetak B
sehingga bukti sample
dan referToSample
objek mengacu pada referensi memori yang sama.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
Ini akan mencetak AB
yang juga membuktikan hal yang sama.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
Jelas ini akan melempar NullPointerException
karena saya mencoba memanggil append
referensi nol.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Jadi inilah pertanyaan saya, mengapa sampel kode terakhir tidak dibuang NullPointerException
karena yang saya lihat dan pahami dari dua contoh pertama adalah jika dua objek merujuk ke objek yang sama maka jika kita mengubah nilai apa pun maka itu juga akan mencerminkan yang lain karena keduanya menunjuk ke referensi memori yang sama. Jadi mengapa aturan itu tidak berlaku di sini? Jika saya menetapkan null
ke referToSample maka sampel juga harus nol dan harus membuang NullPointerException tetapi tidak membuangnya, mengapa?
sample
masihsample
. Anda hanya berubahreferToSample
.