System.arraycopy

运行以下两段代码:
代码1:
       String[][] sa1 = new String[][]{{“a11”, “a12”},{“a21”, “a22”}};
       String[][] sa2 = new String[sa1.length][sa1[0].length];
       System.arraycopy(sa1,0, sa2, 0, sa1.length);
       System.out.println(“sa1[0][0] : ” + sa1[0][0]);
       System.out.println(“sa2[0][0] : ” + sa2[0][0]);
       sa1[0][0] = “XXXXX”;
       System.out.println(“———————“);
       System.out.println(“sa1[0][0] : ” + sa1[0][0]);
       System.out.println(“sa2[0][0] : ” + sa2[0][0])
输出:
sa1[0][0] : a11
sa2[0][0] : a11
———————
sa1[0][0] : XXXXX
sa2[0][0] : XXXXX

代码2:
       String[] sa1 = new String[]{“a11”, “a12”};
       String[] sa2 = new String[sa1.length];
       System.arraycopy(sa1,0, sa2, 0, sa1.length);
       System.out.println(“sa1[0] : ” + sa1[0]);
       System.out.println(“sa2[0] : ” + sa2[0]);
       sa1[0] = “XXXXX”;
       System.out.println(“———————“);
       System.out.println(“sa1[0] : ” + sa1[0]);
       System.out.println(“sa2[0] : ” + sa2[0]);
输出:
sa1[0] : a11
sa2[0] : a11
———————
sa1[0] : XXXXX
sa2[0] : a11

可见,当数组是两维时,对源数组的改变也影响到了目标数组,但一维数组却不会有问题。要当心的。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据