System.arraycopy() 浅拷贝 深拷贝
来源:互联网 发布:模拟位置软件 编辑:程序博客网 时间:2024/06/08 13:17
System.arraycopy() 浅拷贝 深拷贝
在分析ArrayList源码的时候,在clone()方法中对System.arraycopy()是如何拷贝数据的产生了疑问?网上的答案是浅拷贝,看不到代码的具体实现就做几个例子测试一下
答案 ,对System.arraycopy()确实是浅拷贝,不会进行递归拷贝,所以产生的结果是基本数据类型是值拷贝,对象只是引用拷贝
基本数据类型
public static void main(String[] args) { ArrayList<String> listStr = new ArrayList<>(); for(int i = 0 ; i < 3 ;i++){ listStr.add(i+""); } //clone一次 ArrayList<String> listStrCopy = (ArrayList<String>) listStr.clone(); //修改clone后对象的值 listStrCopy.remove(2); listStrCopy.add(100+""); for (int i = 0; i < listStr.size(); i++) { System.out.println(listStr.get(i).toString()); System.out.println(listStrCopy.get(i).toString()); } }实验结果 , 可以看出修改对原始数据没有改变,是复制了值00112100
class对象
public class Copy { public static void main(String[] args) { ArrayList<Person> listStr = new ArrayList<>(); for (int i = 0; i < 3; i++) { listStr.add(new Person(i)); } ArrayList<Person> listStrCopy = (ArrayList<Person>) listStr.clone(); //修改clone产生的对象 listStrCopy.get(0).setAge(100); for (int i = 0; i < listStr.size(); i++) { System.out.println(listStr.get(i).toString()); System.out.println(listStrCopy.get(i).toString()); } } static class Person{ private int age; public Person(int age) { this.age = age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "age=" + age + '}'; } }}实验结果 ,修改clone产生对象直接对原list产生了影响,是浅拷贝Person{age=100}Person{age=100}Person{age=1}Person{age=1}Person{age=2}Person{age=2}
阅读全文
0 0
- System.arraycopy() 浅拷贝 深拷贝
- j2me System. arraycopy()(数组拷贝)
- memcpy和System.arraycopy实现数组拷贝
- 数组的拷贝(System.arraycopy和clone)
- 数组拷贝 Array.copyof()方法与 System.arraycopy()方法
- Java数组 以及 System.arraycopy() 的拷贝分析
- arraycopy数组的拷贝
- java 数组的拷贝 对象数组的拷贝 System.arraycopy函数
- 深拷贝&&浅拷贝
- 深拷贝||浅拷贝
- 浅拷贝,深拷贝
- 浅拷贝,深拷贝
- 深拷贝,浅拷贝
- 浅拷贝 深拷贝
- 浅拷贝.深拷贝
- 浅拷贝 深拷贝
- 深拷贝,浅拷贝
- 深拷贝、浅拷贝
- 学习嵌入式要学哪些课程?
- Content-type类型
- 273
- POJ 2955 brackets
- 274
- System.arraycopy() 浅拷贝 深拷贝
- AppDelegate方法调用次序
- 275
- 跨环境实现通用模块seajs
- Netty笔记——技术点汇总
- DateTimePicker
- 随机数算法
- 276
- 自定义view 系列二 text相关方法