数组复制使我们在编程过程中经常要使用到的,在java中数组复制我们大概能够分为两种,一种是引用复制,还有一种就是深度复制(复制后两个数组互不相干)。

以下我们就通过測试的方法来具体看看什么是引用复制和深度复制。

引用复制:

顾名思义就是其值是引用的,值得改变会随着被引用的对象改变。

  1. System.out.println("引用复制-----------------------------");
  2. int[] e = {1,2,3,4,56,7,8};
  3. int[] f = e;
  4. for(int i=0;i<f.length;i++){
  5. System.out.println(f[i]);
  6. }
  7. System.out.println("更改原始一维数组引用复制-----------------------------");
  8. for(int i=0;i<e.length;i++){
  9. e[i]=1;
  10. }
  11. for(int i=0;i<f.length;i++){
  12. System.out.println(f[i]);
  13.  
  14. }

结果:

引用复制-----------------------------

1

2

3

4

56

7

8

更改原始一维数组引用复制-----------------------------

1

1

1

1

1

1

1

以下在展示下两种深度复制的代码:

有两种方法:

一种是clone(),还有一种是System.arraycopy().

  1. System.out.println("一维数组深度复制-----------------------------");
  2. int[] a = {1,2,3,4,56,7,8};
  3. int[] b = (int[])a.clone();
  4. for(int i=0;i<b.length;i++){
  5. System.out.println(b[i]);
  6.  
  7. }
  8. System.out.println("更改原始一维数组深度复制-----------------------------");
  9. for(int i=0;i<a.length;i++){
  10. a[i]=1;
  11. }
  12. for(int i=0;i<b.length;i++){
  13. System.out.println(b[i]);
  14.  
  15. }
  16.  
  17. System.out.println("一维数组深度复制1-----------------------------");
  18. int[] c = {1,2,3,4,56,7,8};
  19. int[] d = new int[c.length];
  20. System.arraycopy(c,0, d, 0, c.length);
  21. for(int i=0;i<d.length;i++){
  22. System.out.println(d[i]);
  23. }
  24. System.out.println("更改原始一维数组深度复制1-----------------------------");
  25. for(int i=0;i<c.length;i++){
  26. c[i]=1;
  27. }
  28. for(int i=0;i<d.length;i++){
  29. System.out.println(d[i]);
  30.  
  31. }

结果显示:

一维数组深度复制-----------------------------

1

2

3

4

56

7

8

更改原始一维数组深度复制-----------------------------

1

2

3

4

56

7

8

一维数组深度复制1-----------------------------

1

2

3

4

56

7

8

更改原始一维数组深度复制-----------------------------

1

2

3

4

56

7

8

java中数组的复制的更多相关文章

  1. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  2. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  3. java中数组的相关知识

      1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...

  4. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  5. 在java 中,数组与 List<T> 类型的相互转换

    在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...

  6. Java中数组的初始化方式

    Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...

  7. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...

  8. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

  9. Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

随机推荐

  1. github的使用简易教程

    一.安装git https://git-for-windows.github.io/ git  ->  git bash 二.配置参数 $ git config --global user.na ...

  2. Lesson 7: C#多线程

    C#多线程 1.适用于: 通过网络进行通信 执行占用时间的操作 区分具有不同优先级的任务 使用户界面在执行后台任务时能快速响应用户的交互 2.Thread类常用属性及方法 属性: IsAlive:显示 ...

  3. Bzoj1407 Savage

    Description Input 第1行为一个整数N(1<=N<=15),即 野人的数目.第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, ...

  4. [bzoj1051][HAOI2006]受欢迎的牛——强连通分量

    题目大意: 给定一个有向图,求能够被其他所有点访问到的点的个数. 题解: 首先,这个题我在洛谷上AC了,但是bzoj上WA,不知道为什么. 说一下解法. 首先,我们进行scc分解,可以知道, 如果一个 ...

  5. php 计算函数执行时间的方法及获得微妙的方法

    // 获得微妙方法 function getMillisecond() { list($s1, $s2) = explode(' ', microtime()); return (float)spri ...

  6. 【IDEA】IDEA下maven项目无法提示和使用EL表达式的解决办法

    今天在IDEA创建web项目之后发现无法使用EL和JSTL, 一.如果JSP中无法自动提示EL表达式,比如${pageContext.request.contextPath},可在pom.xml的&l ...

  7. 【调试】如何使用javascript的debugger命令进行调试(重要)

    首先安装firebug,在firefox的扩展里搜索安装即可. 然后在页面中启用firebug中的脚本: 然后在网页某些位置加入debugger命令,比如如下页面代码: <!DOCTYPE ht ...

  8. List<?>和List<Class<?>>区别及泛型相关

    ?表示是任意类型,但是编译器不能确定他是什么类型,所以你add的时候什么参数也不能传给它Class<?>表示任意类型的Class对象,list里面可以添加任何类型的Class对象,其它的对 ...

  9. SQL 数据库函数

    字符串函数 lower(字符串表达式) | select lower('ABCDEF')返回 abcdef | 返回大写字符数据转换为小写的字符表达式. upper(字符串表达式) | select ...

  10. Python的功能模块[3] -> binascii -> 编码转换

    binascii模块 / binascii Module binascii模块包含很多在二进制和 ASCII 编码的二进制表示之间的转换方法.关于进制转换可以参考一些内置函数. hexlify 与 u ...