2017-02-16 129 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一個方式,你可以做到這一點。 這樣做,如果你改變了第一個或第二個任何東西,另一個將保持不變。

希望我能幫上忙。

相關問題