Java 数组怎么复制
在日常开发里,我们经常需要把一组数据整体挪个位置,或者给多个人用同一份数据,这时候数组复制就派上用场了。比如你做班级成绩统计,把全班数学成绩存成一个数组,要同步给英语老师时,总不能让老师直接改你的原数组吧?这时候复制数组就是个好办法。
直接循环复制:最基础的“手工搬家”
很多人学数组复制时,最先想到的就是“挨个搬”——就像你把抽屉里的文具,一样一样放进另一个新抽屉。Java里可以用for循环遍历原数组,把每个位置的元素逐个赋值到新数组。比如你有个存5个水果的数组String[] fruits = {"苹果", "香蕉", "橙子", "葡萄", "芒果"},要复制一份,就先新建一个长度一样的新数组,再用循环把每个元素传过去。

不过这个方法虽然简单,但写起来有点麻烦,要是数组元素多了,容易写错循环次数,新手很容易搞混下标,比如把i < original.length</code>写成i < newArray.length</code>,就会出现数组越界的错误。
System.arraycopy():Java自带的“批量搬家工具”
为了省事儿,Java给开发者准备了现成的工具,System.arraycopy()就是最常用的一种。它是系统级的方法,专门用来快速复制数组,不用自己写循环。这个方法要传5个参数:原数组、原数组要复制的起始位置、目标数组、目标数组接收的起始位置、要复制的元素数量。
举个例子,如果你想从水果数组的第2个元素(也就是“香蕉”,下标是1)开始,复制3个元素到新数组,从新数组的第0位开始,就可以这么写:System.arraycopy(fruits, 1, newFruits, 0, 3)。复制完的新数组就会是{"香蕉", "橙子", "葡萄"}。这个方法的好处是速度比手写循环快,而且不容易出错,平时开发用得最多。
Arrays.copyOf()和Arrays.copyOfRange():更省心的“定制复制”
如果你只是想复制整个数组,或者复制数组的一部分,还有更简单的方法——Arrays工具类里的两个方法。Arrays.copyOf()可以直接复制整个数组,还能指定新数组的长度。比如你把水果数组复制成新数组,长度可以跟原数组一样,也能短一点,要是长度比原数组长,多余的位置会自动补null(如果是数字类型就补0)。
要是不想复制整个数组,只想要中间某一段,就用Arrays.copyOfRange()。比如你想要水果数组里从“橙子”到“芒果”的部分,就写Arrays.copyOfRange(fruits, 2, 5),这里的结束下标是开区间,也就是不包含下标5的元素,所以刚好取到第2、3、4位的“橙子”“葡萄”“芒果”。这两个方法不用手动建数组,直接返回新数组,代码更简洁。
这几种方法各有适用场景:需要灵活控制复制的起始位置时用System.arraycopy(),要快速复制整个数组或指定范围时,用Arrays工具类的方法会更高效。不管用哪种,核心都是复制后得到的新数组是独立的——改新数组的元素,不会影响原数组,就像你复印试卷,改复印件不会改原件,能避免很多数据混乱的问题。