private String original[] = new String[100];
private String changed[] = new String[100];
然后我在OnCreate
中为这两个数组赋值:
Bundle extras = getIntent().getExtras();
if (extras != null) {
original = extras.getStringArray("sentArray");
changed = original;
}
现在,如果我更改changed
数组成员的值,original
数组也会更改成员。
例如,在我做完之后
changed[0] = "New value";
original[0]
的值也是"新值"。
这样的事情怎么可能?这是一个错误吗?
答案 0 :(得分:6)
changed = original;
此行将“已更改”设置为“原始”,因此它们是具有相同指针的相同数组。您需要复制数组而不是将更改设置为等于原始数据。
您可以尝试使用System.arraycopy()
答案 1 :(得分:3)
Java中的所有内容都是传递值。如果是Array(也就是 除了一个Object之外什么都没有,数组引用按值传递..(只是 就像一个对象引用通过值传递.. ..
当您将数组传递给其他方法时,实际上是对该方法的引用 数组被复制..
通过该引用对数组内容的任何更改都会影响 原始数组..但改变引用指向一个新的 数组不会改变原始方法中的现有引用。
使用
System.arraycopy()
检查this
答案 2 :(得分:0)
当您复制这样的数组时:
changed = original;
您正在复制数组的引用。如果要将所有值从一个数组复制到另一个数组,可以执行以下操作:
for(int i = 0; i < original.size(); i++){
changed[i] = original[i];
}
这是你可以做到这一点的一种方式。 这样做,如果您从第一个或第二个更改任何内容,另一个将保持不可触及。
希望我能提供帮助。
答案 3 :(得分:0)
当我们做Changed = Original
时,我们实际上是分配数组的引用。因此,如果我们对一个数组进行任何更改,它也将反映在另一个数组中,因为Changed
和Original
都指向同一位置。
我们还可以使用System.arraycopy()
方法。系统位于java.lang软件包中。其签名为:
public static void arraycopy(Object src, int srcPos, Object dest,
int destPos, int length)