java数组复制分析
来源:互联网 发布:navicat for mysql下载 编辑:程序博客网 时间:2024/05/21 09:16
public class ArrayCopy { public static void main(String[] args) { ///////////直接赋值法//////////////// int[] a={1,2,3,4}; int[] b=a; for(int i : b) System.out.print(i); System.out.println(); b[0]=0; //改变b数组的第一个元素 for(int i : a)//打印a数组 System.out.print(i);//输出结果为0234 System.out.println(); /** * 可以看到,改变b数组元素的值,其实是改变a元素的值; * 说明b[]=a;这种数组复制方法是一种浅复制,也就是对a数组的引用。 */ ///////////clone()方法//////////////// int[] c={1,2,3,4}; int[] d=c.clone(); for(int i : d) System.out.print(i); System.out.println(); d[0]=0;//改变d数组的第一个元素 for(int i : c)//打印c数组 System.out.print(i);//输出结果为1234 System.out.println(); /* * 可以看到,改变d数组元素的值,并没有对原数组造成影响; * 说明d=c.clone();这种数组方法是将原数组的元素完全复制到新数组,即深复制; * 复制后的数组和原数组有不同的内存空间,是相互独立的。 * */ ///////////////arrayCopy()方法/////////// int[] e={1,2,3,4}; int[] f = new int[4];//初始化数组元素全为0; System.arraycopy(e, 0, f, 0, 1); /** * System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) * 参数意义: * src:原数组名 * srcPos:指定位置开始复制,从索引为srcPos处 * dest:目标数组名 * destPos:复制到目标数组的指定位置,从索引destPos处开始 * length:指定要复制的长度,小于src.length */ for(int i : f) System.out.print(i); System.out.println(); f[0]=0;//改变f数组的第一个元素 for(int i : e)//打印e数组 System.out.print(i);//输出为1234 System.out.println(); /** * 可以看到,改变f数组的值,并不影响原数组e的值; * 和clone()方法一样,也是深复制。 */ /** * 对于二维数组,和一维数组一样; * clone */ int[][] g={{1,2},{3,4}}; int[][] h=g; h[0][0]=0;//改变h数组的第一个元素; for(int[] i : g)//打印原数组 for(int j : i) System.out.print(j);//输出结果:0234 System.out.println(); int[][] k={{1,2},{3,4}}; int[][] l=k.clone(); for(int[] i : l)//打印复制后的数组 for(int j : i) System.out.print(j);//输出结果:1234 System.out.println(); l[0][0]=0;//改变l数组的第一个元素; for(int[] i : k)//打印原数组 for(int j : i) System.out.print(j);//输出结果:0234 System.out.println(); int[][] m={{1,2},{3,4}}; int[][] n=new int[2][2]; System.arraycopy(m, 0, n, 0, 1); for(int[] i : n)//打印复制后的数组 for(int j : i) System.out.print(j);//输出结果:1000 System.out.println(); n[0][0]=0;//改变l数组的第一个元素; for(int[] i : m)//打印原数组 for(int j : i) System.out.print(j);//输出结果:0234 System.out.println(); /** * 可以看到,该写法对二维数组的复制实质上是对数组的数组的引用,是浅复制; * 改变一下System.arraycopy(m, 0, n, 0, 1)为System.arraycopy(m[0], 0, n[0], 0, 1); * 原数组输出变为1234 * 可以看出,此时为深复制; * */ /** * 总结:1.对于一维数组,直接赋值法实质上是对原数组的一个引用,为浅复制, * clone()和arrayCopy()方法则是深复制; * 2.对于二维数组,直接赋值法、clone()和arrayCopy()方法都是对原数组的引用,是浅复制, * 如果要完全复制二维数组,则需先引用到第一层一维数组,在调用clone()和arrayCopy()方法; */ }}
0 0
- java数组复制分析
- 【Java源码分析】Java复制数组的方法
- java中数组复制的4种方式分析
- java数组复制(arraycopy)
- Java复制数组
- java 数组复制
- [Java] arraycopy 数组复制
- java数组的复制
- 回顾java数组复制
- 回顾java数组复制
- JAVA 数组复制
- Java数组的复制
- java 复制数组
- JAVA数组的复制
- java复制数组方法
- java中的数组复制
- java数组复制问题
- java 数组复制
- CS1656号错误是什么
- c++11-语言运行期的强化
- 天津圣安医院住院收费合理
- 在iOS 8中使用UIAlertController
- java 自定义注解验证 (仅限于实体属性值上的注解)
- java数组复制分析
- 不完全微分
- 理解Python 装饰器
- C++Primer第五版 第九章习题答案(11~20)
- MYSQL常用数据类型
- Sublime Text3设置文本的自动换行
- 【tensorflow1.0学习笔记007】实现简单的CNN卷积神经网络
- JQuery(6)
- Linux 适用硬件平台(i386 / i586 / i686 / x86_64)解释