Java 如何拷贝数组的数据?
2016-08-15 21:49
281 查看
我们在操作Java数组的时候,其实是通过一个引用来操作数组的,如果使用简单的=操作符进行赋值的话,只是复制了引用,并没有把数组的数据复制一份。
我们在拷贝数组时,最容易犯的一种错误就是使用赋值运算符=来复制数组,然后对新数组的操作的操作也影响到原数组的数据,那是因为它们根本指向的是同一内存空间。
代码如下:
在以上的代码中,创建了一个长度为3的int型数组arr,然后用赋值运算符=把arr赋值给arr2,通过arr2把它的下标为2的元素的值改为8,然后输出arr,结果如下:
1
2
8
通过运行结果可以看出,arr数组的数据被arr2给修改了,而我们的本意是想创建俩个独立的数组,它们是互不影响的,其实,拷贝数组数据应该使用System.arraycopy()方法,代码如下:
结果如图:
1
2
3
可以看见,俩个数组已经互不影响了~
注意:我们自己也可以写一个数组拷贝方法,关键点在于认识数组的内存结果。
总结:
使用System.arraycopy()方法或者创建一个新的数组实例,然后把数据一个个装进去,不能用=赋值。
我们在拷贝数组时,最容易犯的一种错误就是使用赋值运算符=来复制数组,然后对新数组的操作的操作也影响到原数组的数据,那是因为它们根本指向的是同一内存空间。
代码如下:
public class Test3 { public static void main(String[] args) { int []arr=new int[]{1,2,3}; int []arr2=arr;//赋值引用 arr2[2]=8;//改变一个元素的值 System.out.println(arr.length); for(int i:arr){ System.out.println(i); } } }
在以上的代码中,创建了一个长度为3的int型数组arr,然后用赋值运算符=把arr赋值给arr2,通过arr2把它的下标为2的元素的值改为8,然后输出arr,结果如下:
1
2
8
通过运行结果可以看出,arr数组的数据被arr2给修改了,而我们的本意是想创建俩个独立的数组,它们是互不影响的,其实,拷贝数组数据应该使用System.arraycopy()方法,代码如下:
public class Test3 { public static void main(String[] args) { int []arr=new int[]{1,2,3}; int []arr2=new int[3]; System.arraycopy(arr, 0, arr2, 0, arr.length); arr2[2]=8; for(int i:arr){ System.out.println(i); } } }
结果如图:
1
2
3
可以看见,俩个数组已经互不影响了~
注意:我们自己也可以写一个数组拷贝方法,关键点在于认识数组的内存结果。
总结:
使用System.arraycopy()方法或者创建一个新的数组实例,然后把数据一个个装进去,不能用=赋值。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序