Java 如何在Android中将数组副本放入新数组

Java 如何在Android中将数组副本放入新数组,java,android,arrays,Java,Android,Arrays,我有一个数组,现在我想创建该数组的一个副本,以便在需要时保留数组的先前值 我试过这样的方法: System.arraycopy(firstArray, 0, secondArray, 0, firstArray.length); 但它给了我一个NullPointerException,即: 08-26 13:20:08.421: E/AndroidRuntime(23739): FATAL EXCEPTION: main 08-26 13:20:08.421: E/AndroidRuntime

我有一个数组,现在我想创建该数组的一个副本,以便在需要时保留数组的先前值

我试过这样的方法:

System.arraycopy(firstArray, 0, secondArray, 0, firstArray.length);
但它给了我一个
NullPointerException
,即:

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

请建议如何正确创建阵列副本。

作为例外,您没有为目标分配内存。在System.arrayCopy调用之前

secondArray = new String[first.length]

如果
secondArray
为字符串类型。否则您必须相应地更改它

非常简单,请尝试此操作

String arr2[] = arr1.clone();

根据得到的异常判断,我认为secondArray参数为null

您可以通过简单的“克隆”来复制任何数组,如下所示:

字符串[]copy=orig.clone()

它将使用一组新指针构造一个新数组。这将允许您修改新阵列,而不会干扰原始阵列

请注意,当数组包含对象时,不会复制数组内容。新数组只是指向相同数据的一组新指针。注意:

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();
Object[]a2=新对象[a1.长度];
for(int n=0;n
String[]secondArray=新字符串[first.length]
对于(int i=0;i
String[] secondArray = new String[first.length]

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