需要对以下代码进行澄清:
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,则sample也应该为null,并且应该引发NullPointerException,但不引发一个,为什么?




sample还是sample。你只是改变了referToSample。