1

在 Java 中,让自定义对象o的类型为CustomObject. 然后CustomObject o2 = o;会在不复制 to 的内容的情况下进行o引用o2。但是对于CustomObjects 数组,这种行为是否仍然存在:

CustomObject[] os = new CustomObject[2];
os[1] = o;
os[2] = o;

os[1]os[2]是引用还是它们将是直接副本o并因此是单独的对象?

4

1 回答 1

7

好吧,您实际上的意思是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;

与以往一样,赋值运算符只是将右侧的值复制到左侧。该值是一个参考。

于 2013-02-25T21:27:01.117 回答