不是杰出者才做梦,而是善梦者才杰出
最近在做一个例题的时候用到了arraycopy方法,想将一个地方的数据复制到另外一个位置。回想起当初我学习该方法的时候,也是一头雾水。今天大帅就来帮助心中有疑惑的同学解惑。
概念解读:
arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
src:代表原数组
srcPos:原数组起始的位置
dest:目标数组
destPos:目标数组起始位置
length:需要进行复制数组中元素的长度(特别需要注意复制数组元素的长度,不然会产生异常)
开始上菜:
public class Study{
public static void main(String [ ] args){
W w = new W(); //创建引用对象
w.fun2();
}
}
class W{
void fun2() {
char h1[]= {'a','b','c','d','e','f'};
char h2[]= {'1','2','3','4','5','6'};
System.out.println("h1="+new String(h1));
System.out.println("h2="+new String(h2));
System.out.println("-------------------");
System.arraycopy(h1, 2, h1, 0, 4);
System.out.println("h1="+new String(h1));
System.arraycopy(h1, 0, h2, 0, h1.length);
System.out.println("h2="+new String(h2));
System.out.println("--------------");
System.arraycopy(h1, 2, h2, 3, 2);
System.out.println("h1="+new String(h1));
System.out.println("h2="+new String(h2));
}
W(){ //默认构造方法
}
}
结果显示:
过程分析:
分割线第一部分中是数组原有元素;
分割线第二部分中,第一个arraycopy操作是将h1完全复制到新的数组h2中,即h1=h2=abcdef;第二个复制数组h1到新数组h1(听着很别扭),从数组h1的第二个位置开始进行复制,也就是从字符c开始,在新的数组h1中从第0个位置开始存放,需要复制4个元素到到新的数组h1中,剩下的字符照写,即h1=cdefef;
分割线第三部分中,接着上一个步骤,h1=cdefef,而新的数组h2中,从数组h1的第二个字符开始,也就是从字符e开始进行复制,存放在数组h2的第三个字符(从0开始计算)开始,也就是说前面还是为abc(占了0和1、2三个位置),复制两个字符,从e开始,即复制ef,最后所剩的空间仍然是f,故最终得到h2=abceff。