我刚刚了解到,null
在 C 和 C++ 中取消引用有时会产生未定义的结果。这对我来说非常有趣,就像所有奇怪的编程行为一样(我曾经有人告诉我,他们在合法的生产环境中调试了“损坏的 RAM - 程序没有按书面方式运行”)。因为我主要是一名 Java 开发人员,所以我想知道这是否也可以在该语言中发生?
JLS 没有具体说明null
参考是如何实现的(3.10.7、4.1、15.8.1),所以我不太确定。但我在想,可以通过使用Unsafe API直接操作内存地址来实现。不幸的是,我对 JVM 的内部工作原理没有足够的了解,无法知道这是否可能。
如果可能,那么恶意程序也有可能这样做,这将引发一个有趣的安全问题。
那么:Java 是否有可能在取消引用时有未定义的行为null
,而不是简单地抛出一个NullPointerException
?