在Java中,让自定义对象o
的类型为CustomObject
。然后CustomObject o2 = o;
会作参考,但不会将o
的内容复制到o2
。但是,将这种行为仍然为CustomObject
秒的数组:对象引用数组
CustomObject[] os = new CustomObject[2];
os[1] = o;
os[2] = o;
将os[1]
和os[2]
是引用或者他们会因而单独对象o
直接复制?
在Java中,让自定义对象o
的类型为CustomObject
。然后CustomObject o2 = o;
会作参考,但不会将o
的内容复制到o2
。但是,将这种行为仍然为CustomObject
秒的数组:对象引用数组
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语言规范defines arrays是一样的变量的集合:
数组对象包含多个变量。变量的数量可以是零,在这种情况下,数组被称为空。包含在数组中的变量没有名称;相反,它们由使用非负整数索引值的数组访问表达式引用。这些变量被称为数组的组件。如果一个数组有n个分量,我们说n是数组的长度;数组的组成部分使用0到n - 1之间的整数索引进行引用。
所以真的有点像做:
// Creating the pseudo-array
CustomObject o0 = null;
CustomObject o1 = null;
// Populating it
o0 = o;
o1 = o;
与以往一样,赋值运算符只是复制右侧向左侧的值。该值是一个参考。
我问的原因是我有一个很大的'Graph'对象,其中节点的类型也是'Graph'。当我遍历图时,我需要将一些节点放入一个'Graph []'数组中,我想知道这是否昂贵,这就是为什么担心将对象隐藏到阵列位置的原因。那么这是否意味着我的数组的创建速度与C++中类似的指针数组一样快? – 2013-02-25 21:38:03
@SophieSperner:是的,非常相似。 – 2013-02-25 21:40:12
啊哈,所以Java并没有那么糟糕。接受的答案:) – 2013-02-25 21:41:54
为什么不检查,看看你的自我? – yurib 2013-02-25 21:26:55