数组的拷贝(System.arraycopy和clone)

package org.test.algo;


public class ArrCopyTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		//测试一
//		
//		//拷贝一个数组,我们可以直接通过a=b的形式赋值,但是这样是不是真的就是独立的拷贝?
//		String[] arr1=new String[]{"a","b","c"};
//		ArrCopyTest.printArr(arr1);
//		String[] arr1copy1=arr1;
//		ArrCopyTest.printArr(arr1copy1);
//		System.out.println("-------");
//		arr1[1]="haha";//现在,我把原来数组arr1的值改变一下
//		ArrCopyTest.printArr(arr1);
//		ArrCopyTest.printArr(arr1copy1);//从打印结果看,arr1的拷贝数组arr1copy1的值也跟着改变了,
//		//说明通过=的拷贝只是引用相同的内存地址,并不是真正我们认为的拷贝一个新的变量
		
		
//		//测试二
//		String[] arr1=new String[]{"a","b","c"};
//		ArrCopyTest.printArr(arr1);
//		
//		//System.arraycopy(src, srcPos, dest, destPos, length);的用法测试
//		String[] arr1copy2=new String[arr1.length];
//		System.arraycopy(arr1, 0, arr1copy2, 0, 3);
//		ArrCopyTest.printArr(arr1copy2);
//		
//		System.out.println("arr1copy3-----arr1, 0, arr1copy3, 1, 1----------");
//		String[] arr1copy3=new String[arr1.length];
//		System.arraycopy(arr1, 0, arr1copy3, 1, 1);
//		ArrCopyTest.printArr(arr1copy3);
//		
//		System.out.println("arr1copy4-----arr1, 1, arr1copy4, 1, 1----------");
//		String[] arr1copy4=new String[arr1.length];
//		System.arraycopy(arr1, 1, arr1copy4, 1, 1);
//		ArrCopyTest.printArr(arr1copy4);
//		
//		System.out.println("arr1copy5-----arr1, 0, arr1copy5, 1, 2----------");
//		String[] arr1copy5=new String[arr1.length];
//		System.arraycopy(arr1, 0, arr1copy5, 0, 1);
//		ArrCopyTest.printArr(arr1copy5);
//		
//		System.out.println("arr1copy6-----arr1, 0, arr1copy6, 1, 2----------");
//		String[] arr1copy6=new String[arr1.length];
//		System.arraycopy(arr1, 0, arr1copy6, 1, 2);
//		ArrCopyTest.printArr(arr1copy6);
		
		
		
		//测试三
//		String[] arr1=new String[]{"a","b","c"};
//		ArrCopyTest.printArr(arr1);
//		
//		System.out.println("arr1copy7-----arr1, 0, arr1copy7, tergetPos, arr1copy7.length-tergetPos----------");
//		String[] arr1copy7=new String[arr1.length];
//		int tergetPos=0;//目标开始的下标,arr1copy7.length-tergetPos是拷贝的长度,这样保证不越界
//		System.arraycopy(arr1, 0, arr1copy7, tergetPos, arr1copy7.length-tergetPos);
//		ArrCopyTest.printArr(arr1copy7);
//		
//		arr1[1]="hello";//现在,我把原来数组arr1的值改变一下
//		ArrCopyTest.printArr(arr1);
//		ArrCopyTest.printArr(arr1copy7);
		
		//实验四clone()
		
		String[] arr1=new String[]{"a","b","c"};
		ArrCopyTest.printArr(arr1);
		
		System.out.println("arr1copy8=arr1.clone()");
		String[] arr1copy8=arr1.clone();
		ArrCopyTest.printArr(arr1copy8);
		
		arr1[1]="well";//现在,我把原来数组arr1的值改变一下
		ArrCopyTest.printArr(arr1);
		ArrCopyTest.printArr(arr1copy8);
		
	}
	
	public static void printArr(String arr[]){
		if(arr==null){
			System.out.println("arr is null");
		}else{
			System.out.println("arr.hashCode is:"+arr.hashCode());
			for(int i=0;i

你可能感兴趣的:(我的学习经验--基础)