https://cs61b-2.gitbook.io/cs61b-textbook/3.-references-recursion-and-lists
Reference type
除了 Java 的 8 种基本(primitive)类型(byte、short、int、long、float、double、boolean 和 char)外的类型都称作引用类型(reference type):包含类(class)、数组(array)等
等式黄金法则:当你写 y = x 时,你是在告诉 Java 解释器将 x 中的 bits 复制到 y 中
- 例如:创建类的实例时,如果对同一个类的两个变量执行
变量A = 变量B操作, - 则实际上这两个变量指向的是同一个实例,也就是说它们复制的是内存地址,具体说明见下文。
理解对象实例化和声明的过程
考虑以下代码
1 | public static class Walrus { |
使用 new Walrus(1000, 8.3) 创建一个海豹,会得到一个包含两个 32 位和 64 位盒子的海象,因为 int 类型占 32 位,double 类型占 64 位:

现在海豹已经被创建,但没有被存储在任何变量中,因此需要声明。
同时,在声明任何引用类型的变量时,java 都会保存一个对象引用(一个盒子)。这个引用(盒子)指向海豹在内存中的地址,而不是海豹的数据。具体占用多少位由 JVM 和运行环境决定。
为方便理解,我们可以用一个箭头来表示内存中的地址

考虑以下代码
1 | Walrus a = new Walrus(1000, 8.3); |
根据等式黄金法则,等号的含义是告诉 Java 将 a 中的比特(bits)复制到 b 中。由于 a 中存储的是内存地址,因此复制后 b 中的比特也变成了相同的内存地址,从而指向同一个对象。
为方便理解,可以看作 b 复制了 a 的箭头,最终也拥有一个指向相同对象的箭头。
