当前位置: 代码迷 >> Android >> 更改一个数组中的值会更改另一个数组中的值
  详细解决方案

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

热度:53   发布时间:2023-08-04 12:04:47.0

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

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]值也是“新值”。

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

 changed = original;

此行将“已更改”设置为“原始”,因此它们是具有相同指针的相同数组。 您需要复制数组而不是将更改设置为等于原始数据。

您可以尝试使用

Java中的所有内容都是传递值的..如果是Array(这只是一个Object),数组引用按值传递..(就像通过值传递对象引用一样)..

将数组传递给其他方法时,实际上会复制对该数组的引用。

通过该引用对数组内容的任何更改都将影响原始数组。但是将引用更改为指向新数组将不会更改原始方法中的现有引用。

采用

System.arraycopy()

检查

当你复制这样的数组时:

changed = original;

您正在复制数组的引用。 如果要将所有值从一个数组复制到另一个数组,可以执行以下操作:

for(int i = 0; i < original.size(); i++){
    changed[i] = original[i];
}

这是你可以做到这一点的一种方式。 这样做,如果你从第一个或第二个改变任何东西,另一个将保持不可触及。

希望我能提供帮助。

当我们做Changed = Original ,我们实际上分配了数组的引用。 因此,如果我们对一个数组进行任何更改,它也会反映在其他数组中,因为ChangedOriginal引用相同的位置。

我们也可以使用System.arraycopy()方法。 系统存在于java.lang包中。 它的签名如下:

public static void arraycopy(Object src, int srcPos, Object dest, 
                             int destPos, int length)
  相关解决方案