Dav*_*ron 26

Java确实有指针 - 指针,你不能执行指针运算.

来自古老的JLS:

Java编程语言中有两种类型:基本类型(第4.2节)和引用类型(第4.3节).相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并在以下操作:原始值(§4.2)和参考值(§4.3).

后来:

一个对象是一个类的实例阵列.

引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它指的是没有对象.

(强调他们的)

所以,要解释一下,如果你写:

Object myObj = new Object();
Run Code Online (Sandbox Code Playgroud)

然后myObj是一个引用类型,它包含一个引用值,该引用值本身就是一个指向新创建的引用值Object.

因此,如果设置myObjnull您正在设置参考值(也称为指针)null.因此,当取消引用变量时,会合理地抛出NullPointerException.

别担心:这个话题以前一直在热烈讨论.

  • 然而,Java 引用不一定是指向内存中固定地址的指针。Java 允许 JVM 实现具有一些功能,例如复制在内存中移动对象的垃圾收集器。“myObj 是包含引用值的引用类型...”是正确的,但“...本身就是指向新创建的对象的指针”则不正确。Java 引用是具有指定语义的抽象类型。Java 引用的实现*可以*使用简单指针,但不是*必须*这样做。NullPointerException 也可以很容易地命名为 NullReferenceException。 (2认同)