Nead làm rõ cho mã sau:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Điều này sẽ in ra Bđể chứng minh samplevà referToSamplecác đối tượng tham chiếu đến cùng một tham chiếu bộ nhớ.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
Điều này sẽ in ABra cũng chứng minh điều tương tự.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
Rõ ràng điều này sẽ ném NullPointerExceptionbởi vì tôi đang cố gắng gọi appendmột tham chiếu rỗng.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Vì vậy, đây là câu hỏi của tôi, tại sao mẫu mã cuối cùng không ném ra NullPointerExceptionbởi vì những gì tôi thấy và hiểu được từ hai ví dụ đầu tiên là nếu hai đối tượng tham chiếu đến cùng một đối tượng thì nếu chúng ta thay đổi bất kỳ giá trị nào thì nó cũng sẽ phản ánh sang đối tượng khác vì cả hai đều trỏ đến cùng một tham chiếu bộ nhớ. Vậy tại sao quy tắc đó không được áp dụng ở đây? Nếu tôi gán nullcho referenceToSample thì mẫu cũng phải là null và nó sẽ ném NullPointerException nhưng nó không ném một cái, tại sao?




samplevẫn cònsample. Bạn chỉ thay đổireferToSample.