2013-08-26 49 views
-2

我有一個數組,現在我想創建該數組的副本,以便我可以保留我的數組的以前的值,如果我想;在Android中爲Array創建一個數組副本?

我想是這樣的

System.arraycopy(firstArray, 0, secondArray, 0, firstArray.length); 

但它給了我一個空指針異常即

08-26 13:20:08.421: E/AndroidRuntime(23739): FATAL EXCEPTION: main 
08-26 13:20:08.421: E/AndroidRuntime(23739): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.iweentravel/com.android.iweentravel.MainAcvtivity}: java.lang.NullPointerException: dst == null 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.ActivityThread.access$600(ActivityThread.java:149) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.os.Looper.loop(Looper.java:153) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.ActivityThread.main(ActivityThread.java:4987) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at java.lang.reflect.Method.invoke(Method.java:511) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at dalvik.system.NativeStart.main(Native Method) 
08-26 13:20:08.421: E/AndroidRuntime(23739): Caused by: java.lang.NullPointerException: dst == null 
08-26 13:20:08.421: E/AndroidRuntime(23739): at java.lang.System.arraycopy(Native Method) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at com.android.iweentravel.MainAcvtivity.onCreate(MainAcvtivity.java:99) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.Activity.performCreate(Activity.java:5020) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
08-26 13:20:08.421: E/AndroidRuntime(23739): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
08-26 13:20:08.421: E/AndroidRuntime(23739): ... 11 more 

請建議我我如何能做到這一點,現在

回答

0

很簡單試試這個

String arr2[] = arr1.clone(); 
1

作爲例外站在你沒有爲目的地分配內存。 System.arrayCopy之前調用

secondArray = new String[first.length] 

如果secondArray是String類型的。否則,你必須改變它相應

0

由你得到的異常情況來看,我想說的secondArray參數爲null。

可以通過簡單的 「克隆它」 複製任何陣列,像這樣:

字符串[]複製= orig.clone();

它會用一組新的指針構造一個新的數組。這將允許您修改新陣列,而不會打擾原始文件。

請注意,當您的數組包含對象時,不會複製數組CONTENT。新數組只是一組指向相同數據的指針。觀察:

Object[] a1 = new Object[3]; 
a1[0] = objectA; 
a1[1] = objectB; 
a1[2] = objectC; 
Object[] a2 = a1.clone(); 

a2 [0]現在指向與a1 [0]完全相同的對象實例。因此,如果要修改指向a2 [0]的對象中的某些內容,則實際上將更改爲由a1 [0]指向的對象。

如果你不希望這樣要麼,你必須做一些事情,如:

Object[] a2 = new Object[a1.length]; 
for (int n=0; n<a1.length; ++n) 
    a2[n] = a1[n].clone(); 

,這將導致該陣列A1的所謂的深副本。

另外請注意,這個問題在字符串數組的情況下不會出現,因爲字符串是不可變的。

HTH

0
String[] secondArray = new String[first.length] 

for(int i=0; i<firstArray.length; i++){ 
    secondArray[i]=firstArray[i] 
} 
相關問題