问题描述
我真的很奇怪。 在活动中我声明了两个数组
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]
值也是“新值”。
这样的事情怎么可能? 这是一个错误吗?
1楼
changed = original;
此行将“已更改”设置为“原始”,因此它们是具有相同指针的相同数组。 您需要复制数组而不是将更改设置为等于原始数据。
您可以尝试使用
2楼
Java中的所有内容都是传递值的..如果是Array(这只是一个Object),数组引用按值传递..(就像通过值传递对象引用一样)..
将数组传递给其他方法时,实际上会复制对该数组的引用。
通过该引用对数组内容的任何更改都将影响原始数组。但是将引用更改为指向新数组将不会更改原始方法中的现有引用。
采用
System.arraycopy()
检查
3楼
当你复制这样的数组时:
changed = original;
您正在复制数组的引用。 如果要将所有值从一个数组复制到另一个数组,可以执行以下操作:
for(int i = 0; i < original.size(); i++){
changed[i] = original[i];
}
这是你可以做到这一点的一种方式。 这样做,如果你从第一个或第二个改变任何东西,另一个将保持不可触及。
希望我能提供帮助。
4楼
当我们做Changed = Original
,我们实际上分配了数组的引用。
因此,如果我们对一个数组进行任何更改,它也会反映在其他数组中,因为Changed
和Original
引用相同的位置。
我们也可以使用System.arraycopy()
方法。
系统存在于java.lang包中。
它的签名如下:
public static void arraycopy(Object src, int srcPos, Object dest,
int destPos, int length)