这是一个疏忽吗?还是与JVM有关?
这是一个疏忽吗?还是与JVM有关?
Java确实有指针——但是你不能对指针执行指针算术运算。
引自备受推崇的JLS:
Java编程语言中有两种类型:基本类型(§4.2)和引用类型(§4.3)。相应地,可以存储在变量中、作为参数传递、由方法返回和操作的数据值有两种:基本值(§4.2)和引用值(§4.3)。
还有后文:
对象是一个类实例或数组。
引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象。
(强调为他们所述)
因此,要解释一下,如果你写:
Object myObj = new Object();
如果说myObj
是一个引用类型的话,它包含了一个引用值,指向新创建的Object
本身。因此,如果你将myObj
设置为null
,实际上是将这个引用值(也就是指针)设置为null
。因此,当对该变量进行取消引用操作时,就会合理地抛出NullPointerException异常。
不要担心:这个话题已经被广泛讨论过。
我猜这可能与JVM是用C++编码有关。除此之外,指针和引用几乎是相似的。你可以说Java中的引用机制是使用C++指针实现的,并且名称为'NullPointerException'的例外允许该实现细节得以展现。