为什么这不引发NullPointerException?

为什么这不引发NullPointerException?,第1张

为什么这不引发NullPointerException?

null
分配不会通过全局销毁该对象来更改 。这种行为将导致难以跟踪的错误和违反直觉的行为。他们只是打破了具体的 参考

为了简单起见,假设它

sample
指向地址12345。这可能不是地址,在这里仅用于简化。 该地址 通常
用中给出的怪异十六进制表
Object#hashCode()
,但这与实现有关。
1个

StringBuilder sample = new StringBuilder(); //sample refers to //StringBuilder at 12345StringBuilder referToSample = sample; //referToSample refers to //the same StringBuilder at 12345 //SEE DIAGRAM 1referToSample = null; //referToSample NOW refers to 00000, //so accessing it will throw a NPE. //The other reference is not affected.//SEE DIAGRAM 2sample.append("A"); //sample STILL refers to the same StringBuilder at 12345 System.out.println(sample);

从标记的线

See diagram
开始,当时的对象图如下:

图1:

[StringBuilder sample]    -----------------> [java.lang.StringBuilder@00012345]          ↑[StringBuilder referToSample] ------------------------/

图2:

[StringBuilder sample]    -----------------> [java.lang.StringBuilder@00012345][StringBuilder referToSample] ---->> [null pointer]

图2显示,废止

referToSample
不会破坏
sample
对StringBuilder 的引用
00012345

1 GC的考虑使其难以置信。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5426934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存