System.arraycopy()

arraycopy()解析

该方法的声明是:

public static void arraycopy​(Object src,
					int srcPos,
					Object dest,
					int destPos,
					int length)

该方法的功能是:从指定的源数组复制数组,从指定的位置开始复制到目标数组的指定位置

  • 当复制的元素是基础类型时,只是复制数组元素变量的值。
  • 但如果复制的对象是引用类型(比如,二维数组中的元素——数组,应该是引用类型的),引用类型存的是所指对象的内存地址,它实际上只是把内存地址赋值了。
    也就是说,如果你的对象都是同一地址,那么改变该地址的值,另外一个同地址的对象也会改变。比如 List a = new ArrayList(); a.add(“a”);List b=a;b.add(“b”);
    System.out.println(a);//output:[a,b]这里边的a、b就是同一地址;但是有赋值的则不会如此:String a=“a”;Stringb=a;b=“b”;
    System.out.println(a);//output:a这里边b的引用虽然指向了a但是后来的赋值让它指向了新的内容,没有改变原来地址的值;所以a没有改变。

看下面一段代码:

public class TestArrayCopy {
  public static void main(String args[]) {
  //int类型 一维数组
  	int[] a = {1, 2, 3};
  	int[]acopy = new int[3];
		for(int i=0;i<a.length;i++){
			System.out.print(a[i]+" ");
		}
    System.out.println();
  	System.arraycopy(a,0,acopy,0,3);
  	for(int i=0;i<acopy.length;i++){
			System.out.print(acopy[i]+" ");
		}
    System.out.println();
  
  	acopy[2] = 4;
  	for(int i=0;i<a.length;i++){
			System.out.print(a[i]+" ");
		}
    System.out.println();
    
  	for(int i=0;i<acopy.length;i++){
			System.out.print(acopy[i]+" ");
		}
    System.out.println();
  	 //String类型 一维数组
    String[] s = 
            {"Mircosoft","IBM","Sun","Oracle","Apple"};
    String[] sBak = new String[6];
    System.arraycopy(s,0,sBak,0,s.length);
   
    for(int i=0;i<sBak.length;i++){
      System.out.print(sBak[i]+" ");
    }
    System.out.println();
   
    sBak[2] =  "XiaoMi";    
    for(int i=0;i<sBak.length;i++){
 			 System.out.print(sBak[i]+" ");
		}
		System.out.println();
	  for(int i=0;i<s.length;i++){
				System.out.print(s[i]+" ");
	  }
    System.out.println();
     //int类型 二维数组
    int[][] intArray = {{1,2},{1,2,3},{3,4}};
    int[][] intArrayBak = new int[3][];
    System.arraycopy
            (intArray,0,intArrayBak,0,intArray.length);
    intArrayBak[2][1] = 100;
    
    for(int i = 0;i<intArray.length;i++){
        for(int j =0;j<intArray[i].length;j++){
            System.out.print(intArray[i][j]+"  "); 
        }
        System.out.println();
    }
    
    for(int i = 0;i<intArrayBak.length;i++){
        for(int j =0;j<intArrayBak[i].length;j++){
            System.out.print(intArrayBak[i][j]+"  "); 
        }
        System.out.println();
    }   
  }
}

输出结果是:
E:\java\javademo\Array>java TestArrayCopy
1 2 3
1 2 3
1 2 3
1 2 4
Mircosoft IBM Sun Oracle Apple null
Mircosoft IBM XiaoMi Oracle Apple null
Mircosoft IBM Sun Oracle Apple
1 2
1 2 3
3 100
1 2
1 2 3
3 100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值