在 Java 中,让自定义对象o
的类型为CustomObject
. 然后CustomObject o2 = o;
会在不复制 to 的内容的情况下进行o
引用o2
。但是对于CustomObject
s 数组,这种行为是否仍然存在:
CustomObject[] os = new CustomObject[2];
os[1] = o;
os[2] = o;
将os[1]
和os[2]
是引用还是它们将是直接副本o
并因此是单独的对象?
好吧,您实际上的意思是os[0]
,os[1]
因为数组在 Java 中是从 0 开始的……但是是的,它们将是引用。两个数组元素将引用同一个对象。
重要的o
是,也不是一个对象:
o
是一个变量:它有一个名字和一个值o
是一个引用:它要么为空,要么引用一个对象表达式的值(无论是简单的变量值、方法调用的结果还是其他)在 Java中从来都不是- 它始终是引用或原始值。object
Java 语言规范定义数组的方式就像变量的集合:
一个数组对象包含许多变量。变量的数量可能为零,在这种情况下,数组被称为是空的。数组中包含的变量没有名称;相反,它们被使用非负整数索引值的数组访问表达式引用。这些变量称为数组的组件。如果一个数组有 n 个分量,我们说 n 是数组的长度;使用从 0 到 n - 1(含)的整数索引来引用数组的组件。
所以它真的有点像这样做:
// Creating the pseudo-array
CustomObject o0 = null;
CustomObject o1 = null;
// Populating it
o0 = o;
o1 = o;
与以往一样,赋值运算符只是将右侧的值复制到左侧。该值是一个参考。