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