System.arrayCopy的使用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > System.arrayCopy的使用

System.arrayCopy的使用

 2012/4/24 17:13:39  czj4451  程序员俱乐部  我要评论(0)
  • 摘要:首先看一下声明,这是一个native方法://src-thesourcearray//srcPos-startingpositioninthesourcearray//dest-thedestinationarray//destPos-startingpositioninthedestinationdata//length-thenumberofarrayelementstobecopiedpublicstaticnativevoidarraycopy(Objectsrc,intsrcPos
  • 标签:system 使用
首先看一下声明,这是一个native方法:

    // src - the source array
    // srcPos - starting position in the source array
    // dest - the destination array
    // destPos - starting position in the destination data
    // length - the number of array elements to be copied
    public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);


1. 测试自我复制

	int[] array = new int[] { 2, 3, 4, 5, 6 };
	System.out.println(Arrays.toString(array)); // [2, 3, 4, 5, 6]
	
	System.arraycopy(array, 1, array, 3, 2);
	System.out.println(Arrays.toString(array)); // [2, 3, 4, 3, 4]


2. 测试复制
	int[] array2 = new int[6];
	System.arraycopy(array, 1, array2, 0, 3);
	System.out.println(Arrays.toString(array2)); // [3, 4, 3, 0, 0, 0]


3. 测试数组越界

不越界的要求:
a. 源的起始位置 + 长度 <= 源的末尾
b. 目标的起始位置 + 长度 <= 目标的末尾
c. 且所有的参数 >= 0

		System.arraycopy(array, 0, array2, 0, array.length + 1); // java.lang.ArrayIndexOutOfBoundsException


4. 类型转换

源和目标数组的类型要一致:
a. 类型相同
b. 都是引用类型,并且可以转换

		Object[] array3 = new Object[] { 1, null, 3, 4.4, 5.1 };
		Integer[] array4 = new Integer[5];
		// ArrayStoreException would be thrown for copying the array whose component type is reference type
		// to the one whose component type is primitive type
		// int array 4 = new int[5];
		try {
			System.arraycopy(array3, 0, array4, 0, array3.length);
		} catch (ArrayStoreException e) {
			e.printStackTrace(); // java.lang.ArrayStoreException
		}
		System.out.println(Arrays.toString(array4)); // [1, null, 3, null, null]

可以看出,复制成功的部分会保留。
发表评论
用户名: 匿名