public static void main(String[] args){
int[] arr = {1,2,3,4}
int[] arr2 = new int[arr.length]
System.arraycopy(arr,0,arr2,0,arr2.length)
System.out.println(java.util.Arrays.toString(arr2))
}
}
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
这就是从指定的源数组复制一个数组到目的数组,复制是从指定位置开始到目标数组指定位置结束,也就是从你的第一个数组0
index开始复制长度为3复制到目标的0开始前3位
简单说system.arraycopy(a1,0,a2,0,3)
a1是你的原数组就是要提供复制的,0是你的原数组的开始位数,
也就是a1的index,a2是目的数组,就是需要复制到的,0是a2的开始位数吗,也就是a2的index,3是复制的长度
System.arraycopy拷贝数组,arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到
dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于 length
参数。源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的
destPos 到 destPos+length-1 位置。
int[] res=new int[]{1,2,3,4,5}
int[] des=new int[]{6,7,8,9,10}
System.arraycopy(res,0,res,0,3)
TextView TV= (TextView) findViewById(R.id.text)
StringBuffer SB=new StringBuffer()
for (int i=0i<res.lengthi++){
SB.append(res[i])
}
TV.setText(SB.toString())123456789
打印结果12345;
如果参数 src 和 dest 引用相同的数组对象,则复制的执行过程就好像首先将
srcPos 到 srcPos+length-1 位置的组件复制到一个带有
length 组件的临时数组,然后再将此临时数组的内容复制到目标数组的 destPos 到
destPos+length-1 位置一样。
int[] res=new int[]{1,2,3,4,5}
int[] des=new int[]{6,7,8,9,10}
System.arraycopy(res,1,res,0,3)
TextView TV= (TextView) findViewById(R.id.text)
StringBuffer SB=new StringBuffer()
for (int i=0i<res.lengthi++){
SB.append(res[i])
}
TV.setText(SB.toString())123456789
假如这样的话就是23445.。。。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
int[] res=new int[]{1,2,3,4,5}
int[] des=new int[]{6,7,8,9,10}
System.arraycopy(res,1,des,0,3)
TextView TV= (TextView) findViewById(R.id.text)
StringBuffer SB=new StringBuffer()
for (int i=0i<des.lengthi++){
SB.append(des[i])
}
TV.setText(SB.toString())
//System.out.print(des.toString())
}
}
打印结果是234910.
好明显的道理就是我们是为了得到目标数组,原数组只起被复制的功能,我们打印一万遍源数组还是不变的。但是我们要考虑的是,我们复制的长度再加上目标数组的起始位置不能大于目标数组的长度,
System.arraycopy(res,1,des,4,3)1
我们不能从目标数组第四位加起,还截取3,那么就.ArrayIndexOutOfBoundsException:数组下标越界了。
所以要慎重。