让我们从下面的陈述开始:
String x=null;
1. 这句话到底是什么意思?
回想一下什么是变量, 什么是值.
一个常见的比喻是变量类似于一个盒子.
就像您可以使用一个框来存储某些东西一样, 您也可以使用一个变量来存储一个值.
在声明变量时, 我们需要设置它的类型.
Java 中有两大类类型: 原语类型和引用类型.
声明为基元类型的变量存储值; 引用类型声明的变量存储引用.
在这种情况下, 初始化语句声明一个变量 "x".
"x" 存储字符串引用.
这里是零.
下面的可视化将更好地理解这个概念.
如果 x = "abc", 则如下所示:
2. 内存中的 null 到底是什么?
内存中的 null 到底是什么? 或者 Java 中的 null 值是什么?
首先, null 不是一个有效的对象实例, 因此没有为它分配内存.
它只是一个值, 指示对象引用当前不引用对象.
从 JVM 规范:
Java 虚拟机规范不要求具体的值编码为 null.
我假设它和其他 C 语言一样都是 0.
3. 内存中的 x 到底是什么?
现在我们知道零是什么.
我们知道变量是一个存储位置和一个相关的符号名 (标识符), 它包含一些值.
x 在内存中的确切位置?
从 JVM 运行时数据区域的图中, 我们知道由于每个方法在线程的堆栈
中都有一个私有堆栈框架, 所以本地变量位于该框架中.
来源: http://www.jianshu.com/p/f7f9c6eec274