Java疑问解答第六篇:原来System类中的arraycopy方法竟然是这么用的......

不是杰出者才做梦,而是善梦者才杰出

最近在做一个例题的时候用到了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

有疑问欢迎留言!

点个赞,加个关注呗!

发布了50 篇原创文章 · 获赞 208 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/H_W_1212/article/details/104294373