可能重复:
如何在数组中存储对变量的引用?
考虑以下代码:
var a = 'cat';
var b = 'elephant';
var myArray = [a,b];
a = 'bear';
myArray[0] 仍将返回“猫”。有没有办法将引用存储在数组中而不是克隆中,以便 myArray[0] 将返回“熊”?
可能重复:
如何在数组中存储对变量的引用?
考虑以下代码:
var a = 'cat';
var b = 'elephant';
var myArray = [a,b];
a = 'bear';
myArray[0] 仍将返回“猫”。有没有办法将引用存储在数组中而不是克隆中,以便 myArray[0] 将返回“熊”?
While I agree with everyone else saying that you should just use myArray[0] = whatever, if you really want to accomplish what you're trying to accomplish you could make sure that all you variables in the array are objects.
var a = {animal: 'cat'},
b = {animal: 'elephant'};
var myArray = [a, b];
a.animal = 'bear';
myArray[0].animal is now 'bear'.
不,JavaScript 不会以这种方式进行引用。
即使您的数组包含对对象的引用,使变量引用完全不同的对象也不会更改数组的内容。
您的代码不会修改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 */
在 Java 中,如果您更改变量引用的对象(而不是为变量分配新的引用),您将获得所需的行为。
例子:
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 不支持此类引用。
只有对象被存储为引用。但我怀疑这是你想要的。
你已经回答了你自己的问题。如果您希望 myArray[0] 等于 Bear,则设置:
myArray[0] = "bear";