Java - null在内存中到底是什么
Java中随时都在使用 null
,那么 null
到底是什么?让我们从一个简单的表达式说起:
String x = null;
1. 这句话的确切含义是什么?
回想什么是变量,什么是值。一个常见的隐喻是一个变量类似于一个盒子。就像你可以用一个盒子来存储东西一样,你可以使用变量来存储一个值。在声明变量时,我们需要设置变量的类型。
Java中有两大类类型:原始类型和引用类型。声明原始类型存储值的变量;引用类型存储引用声明的变量。在这种情况下,初始化语句声明一个变量 x
。x
存储字符串引用,这里的引用是 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/