Необходимое разъяснение для следующего кода:
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
.