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。
不用担心:这个话题之前已经经过激烈的辩论。