Java:为什么不将NullPointerExceptions称为NullReferenceExceptions?

时间:2020-03-06 14:25:29  来源:igfitidea点击:

这是疏忽吗?还是与JVM有关?

解决方案

我想这与JVM是用C ++编码的事实有关。除此之外,指针和引用几乎相似。我们可以说Java中的引用机制是使用C ++指针实现的,名称" NullPointerException"使该实现的细节更加清晰。

这是由于Java在设计时就考虑了C程序员。在C术语中,使用"指针"代替"引用"

Java确实有指针-无法在其上执行指针算术的指针。

从古老的JLS:

There are two kinds of types in the Java programming language: primitive types (§4.2) and reference types (§4.3). There are, correspondingly, two kinds of data values that can be stored in variables, passed as arguments, returned by methods, and operated on: primitive values (§4.2) and reference values (§4.3).

然后:

An object is a class instance or an array.
  
  The reference values (often just references) are pointers to these objects, and a special null reference, which refers to no object.

(强调他们的)

因此,要解释一下,如果我们写:

Object myObj = new Object();

那么" myObj"是一个引用类型,它包含一个引用值,该引用值本身就是指向新创建的"对象"的指针。

因此,如果将" myObj"设置为" null",则将参考值(即指针)设置为" null"。因此,在取消引用变量时会合理地引发NullPointerException。

不用担心:这个话题之前已经经过激烈的辩论。