Пояснення Nead для наступного коду:
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тому що те, що я бачу і розумію з перших двох прикладів, це те, що два об’єкти, що посилаються на один і той же об’єкт, тоді, якщо ми змінимо будь-яке значення, це також відобразиться на іншому, оскільки обидва вказують на те саме посилання на пам'ять. То чому це правило тут не застосовується? Якщо я призначаю nullreferenceToSample, тоді зразок також повинен бути нульовим, і він повинен кидати NullPointerException, але він не кидає, чому?




sampleдосіsample. Ти лише змінивсяreferToSample.