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 - 要复制的数组元素的数量。
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:数组下标越界了。
所以要慎重。
最简单的一种就是直接挨个把原数组的值赋给新数组 不过一般都用System.arraycopy(原数组起始复制的标号,新数组接收复制的起始标号,赋值的长度) 这个方法
例如:public class llx {
public static void main(String args[]) {
int a[] = {1,2,3,4,5}
int b[] = new int[10]//搞一个10位置的新数组
System.arraycopy(a[0],b[0],a.length)//从a的第一个位置开始复制;从b的第一个位置开始接收;一共接收a的总长度(a.length);;;懂了吗?这样的话 b的前5个值就被传递了,但是后5个是初始值0。
}
}
补充:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。