Java中的数组复制

可以使用以下方法将Java中的数组复制到另一个数组。

  • 使用变量赋值。此方法有副作用,因为对数组元素的更改会在两个地方反映出来。为避免这种副作用,以下是复制数组元素的更好方法。

  • 创建一个相同长度的新数组,并复制每个元素。

  • 使用数组的克隆方法。克隆方法将创建一个相同大小的新数组。

  • 使用System.arraycopy()方法。arraycopy可用于复制数组的子集。

示例

创建一个名为Tester的Java类。

测试器

public class Tester {
   public static void main(String args[]) {      
      //方案1:使用分配复制数组
      int[] a = {1, 2, 3};      
      int[] b = a;

      //测试副作用
      b[0]++;

      System.out.println("Scenario 1: ");
      System.out.print("Array a: ");
      printArray(a);
      System.out.print("Array b: ");
      printArray(b);

      //复制数组
      int[] c = {1, 2, 3};       int[] d = new int[c.length];
      for (int i = 0; i < d.length; i++) {
         d[i] = c[i];
      }

      //测试副作用
      d[0]++;

      System.out.println("Scenario 2: ");
      System.out.print("Array c: ");
      printArray(c);
      System.out.print("Array d: ");
      printArray(d);

      //方案3:使用clone复制数组
      int[] e = {1, 2, 3};      
      int[] f = e.clone();

      //测试副作用
      f[0]++;

      System.out.println("Scenario 3: ");
      System.out.print("Array e: ");
      printArray(e);
      System.out.print("Array f: ");
      printArray(f);

      //复制数组
      int[] g = {1, 2, 3};      
      int[] h = new int[g.length];
      System.arraycopy(g, 0, h, 0, h.length);

      //测试副作用
      h[0]++;

      System.out.println("Scenario 4: ");
      System.out.print("Array g: ");
      printArray(g);
      System.out.print("Array h: ");
      printArray(h);    
   }

   public static void printArray(int[] a) {
      System.out.print("[ ");
      for (int i = 0; i < a.length; i++) {
         System.out.print(a[i] + " ");
      }
      System.out.println("]");
   }
}

输出结果

编译并运行文件以验证结果。

Scenario 1:  
Array a: [ 2 2 3 ]
Array b: [ 2 2 3 ]
Scenario 2:  
Array c: [ 1 2 3 ]
Array d: [ 2 2 3 ]
Scenario 3:  
Array e: [ 1 2 3 ]
Array f: [ 2 2 3 ]
Scenario 4:  
Array g: [ 1 2 3 ]
Array h: [ 2 2 3 ]