需要对以下代码进行澄清:
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
。