更改一个数组中的值会更改另一个数组中的值

时间:2017-02-16 19:08:45

标签: java android arrays

我真的很奇怪。在活动中我声明了两个数组

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]的值也是"新值"。

这样的事情怎么可能?这是一个错误吗?

4 个答案:

答案 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时,我们实际上是分配数组的引用。因此,如果我们对一个数组进行任何更改,它也将反映在另一个数组中,因为ChangedOriginal都指向同一位置。

我们还可以使用System.arraycopy()方法。系统位于java.lang软件包中。其签名为:

public static void arraycopy(Object src, int srcPos, Object dest, 
                             int destPos, int length)