Необходимое разъяснение для следующего кода:
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потому что то, что я вижу и понимаю из первых двух примеров, - это если два объекта относятся к одному и тому же объекту, тогда, если мы изменим какое-либо значение, оно также отразится на другом, потому что оба указывают на та же ссылка на память. Так почему это правило здесь не применяется? Если я назначаю nullreferToSample, тогда образец также должен быть нулевым, и он должен генерировать исключение NullPointerException, но не выбрасывает его, почему?




sampleвсе ещеsample. Вы только изменилисьreferToSample.