คำชี้แจงสำหรับรหัสต่อไปนี้:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
สิ่งนี้จะพิมพ์B
เพื่อพิสูจน์sample
และreferToSample
วัตถุอ้างถึงการอ้างอิงหน่วยความจำเดียวกัน
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
นี่จะเป็นการพิมพ์AB
ที่พิสูจน์ได้เช่นเดียวกัน
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
เห็นได้ชัดว่าสิ่งนี้จะNullPointerException
เกิดขึ้นเพราะฉันพยายามเรียกappend
ใช้การอ้างอิงที่เป็นโมฆะ
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
นี่คือคำถามของฉันทำไมตัวอย่างโค้ดสุดท้ายไม่โยนNullPointerException
เพราะสิ่งที่ฉันเห็นและเข้าใจจากสองตัวอย่างแรกคือถ้าวัตถุสองชิ้นอ้างถึงวัตถุเดียวกันถ้าเราเปลี่ยนค่าใด ๆ มันก็จะสะท้อนไปที่อื่นด้วยเพราะทั้งสองชี้ไปที่ การอ้างอิงหน่วยความจำเดียวกัน แล้วทำไมกฎนั้นถึงไม่ใช้ที่นี่? ถ้าฉันกำหนดnull
ให้ ReferToSample ตัวอย่างก็ควรเป็นโมฆะด้วยและควรโยน NullPointerException แต่ไม่ได้โยนไปทำไม?
sample
ยังsample
อยู่referToSample
คุณเปลี่ยนแปลงเท่านั้น