我们知道在Java中数组是非基本类型既数组是对象(Object)的子类,所以用下面的这种方式是不能复制该对象的
public static void main(String[] args) {int[] arry1 = new int[]{1, 2, 3, 4};//数组赋值int[] arry2 = arry1; //一个数组对象,两个引用同时引用该对象System.out.println(arry1[1]);System.out.println(arry2[1]);arry1[1] = 8;System.out.println(arry2[1]);}
这样并不能复制数组只是一个简单的赋值操作,下面我们采取另一种方式试一下。
其实这个Java API中已经提供了一个非常简便并且效率比较高的方法System.arraycopy(src, srcPos, dest, destPos, length),这个方法的底层是用C++写的,比上面的那种for循环实现拷贝效率要高的多。 JDK 1.6以上提供了Arrays.copyOf(src, length)方法,其实这个方法的底层也是arraycopy方法实现的。 System.arraycopy()可以复制数组 Arrays.copyOf()可以简便的创建数组副本 public static void main(String[] args) {int[] arry1 = new int[]{1, 2, 3, 4};int[] arry3 =new int[arry1.length];for(int i=0; i
public static void main(String[] args) {int[] src = {1, 2, 3, 4};int[] dest = new int[4];System.arraycopy(src, 0, dest, 0, src.length);System.out.println(Arrays.toString(dest));}
public static void main(String[] args) {int[] src = {1, 2, 3, 4};int[] dest = Arrays.copyOf(src, src.length);System.out.println(Arrays.toString(dest));}
学过Java和C语言的知道Java的数组对象的大小是固定的,数组对象是不能扩展的,不过我们可以用上面复制数组的方法来实现数组的动态长度。 public static void main(String[] args) {char[] cArr = {'大', '碗'};char[] temp = Arrays.copyOf(cArr, 4);temp[2] = '干';temp[3] = '拌';System.out.println(Arrays.toString(temp));}
下面我们通过上面的方法完成一个练习“从一段文字中统计某个字符所有的位置” package com.dawanganban.test;import java.util.Arrays;public class ArrayCopyTest {public static void main(String[] args) {String str = "统计一个字符在字符串中的所有位置";int[] ary = countAll(str, '字');System.out.println(Arrays.toString(ary));} /*** 统计一个字符在字符串中的所有位置的方法* @param str 被统计的字符串* @param ch 统计的字符* @return 位置数组*/private static int[] countAll(String str, char ch){int[] ary = {};for(int i=0; i