2017-02-16 117 views
0

我真的很奇怪的问题。在活动我声明两个阵列更改一个数组中的值更改另一个数组中的值

private String original[] = new String[100]; 
private String changed[] = new String[100]; 

然后我分配在OnCreate值这两个阵列:如果我改变changed阵列的成员的值

Bundle extras = getIntent().getExtras(); 

if (extras != null) { 
     original = extras.getStringArray("sentArray"); 

     changed = original; 
} 

现在,original阵列也将具有,成员改变。

例如,在我做的original[0]

changed[0] = "New value"; 

值也是 “新价值”。

这是怎么回事?这是一个错误?

回答

3
changed = original; 

此行将'changed'设置为'original',因此它们是具有相同指针的相同数组。您需要复制数组而不是将其设置为等于原始值。

您可以尝试使用System.arraycopy()

2

在Java中的一切传递者值。在数组( 不过的对象)的情况下,数组引用是按值传递。(只是 像的对象引用由值传递)..

当传递数组到其它方法,实际上是参考该 阵列被复制..

通过参考,在阵列的内容的任何变化NCE会影响 原始数组。但改变参考指向一个新的 数组不会改变原来的方法在现有基准..

使用

System.arraycopy() 

检查this

0

当你拷贝一个这样的数组:

changed = original;

您正在复制数组的引用。如果你想所有的值从一个阵列到另一个副本,你可以这样做:

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

That`s一个方式,你可以做到这一点。 这样做,如果你改变了第一个或第二个任何东西,另一个将保持不变。

希望我能帮上忙。