java复制引用数组
我在读关于复制引用数组的书
Object[] obj1 = {new Integer(11),
new StringBuffer("foobar"),
new Double(12.95)};
Object[] obj2 = new Object[obj1.length];
for(int i = 0; i < obj1.length; i ++)
obj2[i] = obj1[i];
//this change to obj1 does NOT effect obj2.
obj1[0] = new Integer(5);
System.out.println(Arrays.toString(obj1));
System.out.println(Arrays.toString(obj2));
System.out.println();
//this change to obj1 DOES effect obj2
((StringBuffer) obj1[1]).append('s');
System.out.println(Arrays.toString(obj1));
System.out.println(Arrays.toString(obj2));
两个数组都指向相同的元素,但改变元素会在第二种情况下改变第二个数组,而不是在第一种情况下。有人能解释一下为什么在第一种情况下它不改变第二个数组吗
# 1 楼答案
在这里,您将一个对新对象的引用分配给其中一个数组的第一个索引,因此另一个数组的第一个索引将继续引用另一个对象,并且不受影响
这里您正在更改
obj1[1]
引用的对象的状态,该对象与obj2[1]
引用的对象相同。因此,两个阵列都会受到影响# 2 楼答案
这里
更改由obj1的第一个元素引用的对象
更改引用引用的对象不会将更改应用于引用此对象的其他引用。 所以,现在两个数组的第一个元素不再引用同一个对象
这里:
两个数组的第一个元素总是引用同一个对象。 您已更改所引用对象的内容。所以这个对象上的所有引用都看到了变化