可能有重复:
如何在数组内存储对变量的引用?
考虑以下代码:
var a = 'cat';
var b = 'elephant';
var myArray = [a,b];
a = 'bear';
myArray[0]仍然会返回'cat'。有没有一种方法可以在数组中存储引用而不是克隆,这样myArray[0]就会返回'bear'?
可能有重复:
如何在数组内存储对变量的引用?
考虑以下代码:
var a = 'cat';
var b = 'elephant';
var myArray = [a,b];
a = 'bear';
myArray[0]仍然会返回'cat'。有没有一种方法可以在数组中存储引用而不是克隆,这样myArray[0]就会返回'bear'?
虽然我同意其他人的观点,认为您应该只使用myArray[0] = whatever,但如果您真的想实现您试图达到的目标,您可以确保数组中的所有变量都是对象。
var a = {animal: 'cat'},
b = {animal: 'elephant'};
var myArray = [a, b];
a.animal = 'bear';
myArray[0].animal现在是“熊”。
不可能的。JavaScript 不支持这样的引用。
只有对象被存储为引用。但我怀疑这不是你想要的。
$b = &$a
那么它就会是真的。 - Madara's Ghost你已经回答了自己的问题。如果你想让myArray[0]等于bear,那么设置:
myArray[0] = "bear";
即使您的数组保存了对象的引用,使变量引用完全不同的对象也不会更改数组的内容。
您的代码并没有修改变量a所引用的对象。它使变量a引用完全不同的对象。
就像您的JavaScript代码一样,以下Java代码也无法工作,因为像JavaScript一样,Java按值传递对象的引用:
Integer intOne = new Integer(1);
Integer intTwo = new Integer(2);
Integer[] intArray = new Integer[2];
intArray[0] = intOne;
intArray[1] = intTwo;
/* Make intTwo refer to a completely new object */
intTwo = new Integer(45);
System.out.println(intArray[1]);
/* output = 2 */
Thing thingOne = new Thing("funky");
Thing thingTwo = new Thing("junky");
Thing[] thingArray = new Thing [2];
thingArray[0] = thingOne;
thingArray[1] = thingTwo;
/* Modify the object referenced by thingTwo */
thingTwo.setName("Yippee");
System.out.println(thingArray[1].getName());
/* output = Yippee */
class Thing
{
public Thing(String n) { name = n; }
private String name;
public String getName() { return name; }
public void setName(String s) { name = s; }
}
JavaScript
而不是Java。然而,Java和JavaScript都是按值传递的,其中对象引用也是按值传递的。因此,在这个特定情况下,我认为你的答案和解释仍然适用。考虑添加一些JavaScript示例,以便更全面。 :) - jamesmortensen
myArray[0]='bear'
。我找不到创建这样的引用的原因。 - lu1s