(译)Java - null在内存中到底是什么


Java中随时都在使用 null,那么 null 到底是什么?让我们从一个简单的表达式说起:

1
String x = null;

1. 这句话的确切含义是什么?

回想什么是变量,什么是值。一个常见的隐喻是一个变量类似于一个盒子。就像你可以用一个盒子来存储东西一样,你可以使用变量来存储一个值。在声明变量时,我们需要设置变量的类型。

Java中有两大类类型:原始类型引用类型。声明原始类型存储值的变量;引用类型存储引用声明的变量。在这种情况下,初始化语句声明一个变量 xx存储字符串引用,这里的引用是 null。

下面的可视化给出了一个更好的概念。

如果 x = "abc",它看起来如下:

2. 内存中的null究竟是什么?

内存中的null究竟是什么?或者Java中的 null 是什么?

首先,null不是有效的对象实例,因此没有为它分配内存。它只是一个值,指示对象引用当前不引用对象。

来自JVM规范:

The Java Virtual Machine specification does not mandate a concrete value encoding null.(Java虚拟机规范并没有授权一个具体的值编码null。)

我假设它是类似于其他C类语言的所有零。

3. x在内存中到底是什么?

现在我们知道 null 是什么。我们知道一个变量是一个存储位置和一个相关的符号名称(标识符),它包含一些值。

x在内存中的确切位置?从JVM运行时数据区域的图中,我们知道,由于每个方法都具有线程堆栈内的私有堆栈帧,因此本地变量位于该帧上。

版权声明:本文为译文,请尊重原作者,转载请保留原文链接:https://www.programcreek.com/2013/12/what-exactly-is-null-in-java/