【0】README

0.1)本文旨在用源代码测试说明, Object.clone 的 的克隆机制(深拷贝 还是 浅拷贝) 的问题;

0.2)本文还添加了对System.arraycopy本地方法的测试(干货——推荐使用该方法进行数组复制)

【1】代码如下

public class Temp {   public static void main(String[] args) {testClone();testClone_2();}public static void testClone() {double[] a = {1, 2, 3};double[] b = a.clone();b[0] = 0;System.out.println(a[0]);//1}public static void testClone_2(){double[] a = new double[3];double[] b;a[0] = 1;b = a.clone();b[0] = 0;System.out.println(a[0]);//1}
}

【2】测试结果

显然, clone的拷贝是深拷贝,因为我在修改数组b时,数组a中的相应元素没有被改变。。(当然,其他书也有例子说 clone是 浅拷贝,仅在本例而言,他是深拷贝)

【3】不规则数组copy

 public static void main(String[] args) {double[][] array = {{1,2,3},{2,2,2},{3,3,3}};double[][] backup = new double[array.length][];int[] begin = {1, 2, 3};//起始下标int single_len = 0;for (int i = 0; i < backup.length; i++) {single_len = array[i].length - begin[i] + 1;backup[i] = new double[single_len];
//          System.arraycopy(src, srcPos, dest, destPos, length);System.arraycopy(array[i], begin[i]-1, backup[i], 0, single_len);}             }

打印结果:

1.00   2.00   3.00
   2.00   2.00
   3.00

【4】System.arraycopy本地方法

4.1)二维数组的copy(干货——循环使用 System.arraycopy 对二维数组的单个一维数组进行copy,不能将二维数组的引用传入到System.arraycopy,不然copy结果还只是 引用间的copy)

public static void main(String[] args) {double[][] temp = {{1,2,3}, {2,3,1}};double[][] a;a = Arrays.copyOf(temp, temp.length);temp[0][0] = -1;System.out.println("\n first output === a array ===");AlgTools.printArray(a);a[0][0] = -2;System.out.println("\n second output === temp array ===");AlgTools.printArray(temp);double[][] b = new double[temp.length][temp[0].length];for (int i = 0; i < temp.length; i++) {System.arraycopy(temp[i], 0, b[i], 0, temp[i].length);}temp[0][0] = -4;System.out.println("\n third output === b array ===");AlgTools.printArray(b);b[0][0] = -5;System.out.println("\n fourth output=== temp array ===");AlgTools.printArray(temp);}
//打印结果
first output === a array ===-1.00   2.00   3.002.00   3.00   1.00second output === temp array ===-2.00   2.00   3.002.00   3.00   1.00third output === b array ===-2.00   2.00   3.002.00   3.00   1.00fourth output === temp array ===-4.00   2.00   3.002.00   3.00   1.00

4.2)一维数组的copy

从以上代码我们可知:System.arraycopy 对一维数组的 copy 就是值对值的copy,而不是引用对引用的copy;

关于Object.clone克隆方法的测试相关推荐

  1. cloning java_深入浅出Java中的clone克隆方法,写得太棒了!

    作者:张纪刚 blog.csdn.net/zhangjg_blog/article/details/18369201/ 2019-03-24 10:33:04 Java中对象的创建 clone 顾名思 ...

  2. 深入浅出Java中的clone克隆方法,写得太棒了!

    作者:张纪刚 blog.csdn.net/zhangjg_blog/article/details/18369201/ Java中对象的创建 clone 顾名思义就是 复制 , 在Java语言中, c ...

  3. java中clone方法_Java Object clone()方法– Java中的克隆

    java中clone方法 Cloning is the process of creating a copy of an Object. Java Object class comes with na ...

  4. Flex通用克隆(clone)方法

    为每个Vo一一书写clone()方法是一件麻烦事,利用flex的反射功能可实现较通用的克隆方法,本方法可保留类型信息,比flex自带的ObjecProxy的copy()和clone()好用哦,代码如下 ...

  5. JavaSE(六)——Object类、克隆方法

    文章目录 1. Object类 1.1 定义 1.2 常用方法 2. 克隆方法 2.1 定义 2.2 对象浅克隆要注意的细节 1. Object类 1.1 定义 Object类是顶层父类,所有的类都直 ...

  6. 关于Java的Object.clone()方法与对象的深浅拷贝,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 文章 ...

  7. Java对象克隆方法(浅克隆、深克隆)

    要让一个对象进行克隆,其实就是两个步骤: 1. 让该类实现java.lang.Cloneable接口: 2. 重写(override)Object类的clone()方法. 上面的克隆方法其实是浅克隆, ...

  8. 返回对应对象的克隆方法

    代码 using System; using System.Collections.Generic; using System.Text; using System.Collections; usin ...

  9. JDK源码解析——Object的hashCode方法

    目录 前言 说明 一.源码目录结构 (1).JDK目录 (2).hotspot目录 二.基础知识 (1).Object Header(对象头) (2).Lock(锁) 1. 无锁 => 偏向锁 ...

最新文章

  1. 总结一些java编程题的思路
  2. Hive 空值、NULL判断
  3. 单片机小白学步系列(十六) 单片机/计算机系统概述:模块化思想
  4. 办公室分配方案python_Python自动化办公室(1),python,一
  5. 数学建模-7.多元线性回归分析
  6. 构建元宇宙概念NFT商城系统——艺术数字藏品平台源码部署
  7. mysql增加约束sql语句_sql语句添加约束
  8. Bootstrap优秀模板-INSPINIA.2.9.2
  9. html5在线制作网站模板,快速建站 20个设计优秀的HTML网站模板(免费)
  10. 【最新黑苹果】Big Sur/Win双系统-小米笔记本pro/gtx 安装教程!
  11. DirectX11:DirectX11下载和环境配置
  12. VMware、vSphere 6.0 网络和存储配置
  13. nmds与mds的区别_数量生态学笔记||非约束排序|NMDS
  14. C++变量前面加下划线的含义
  15. 解决“无法删除文件:无法读源文件或磁盘”的方法(chkdsk)
  16. Unable to open shape_predictor_68_face_landmarks.dat
  17. Python 一键导出微信读书的书籍和笔记
  18. (五) 数据结构 - 归并排序
  19. Android Switch和ToggleButton控件
  20. java将内容写入文件,纯干货

热门文章

  1. 【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】
  2. [2021-09-09 T3] 序列/luogu P3943 星空(异或差分+bfs最短路+状压dp)
  3. 洛谷P4389:付公主的背包(多项式、生成函数)
  4. 上帝造题的七分钟(ybtoj-树状数组)
  5. POJ3348-Cows【凸包,计算几何】
  6. ssl提高组周六备考赛【2018.10.27】
  7. P2280-激光炸弹【二维前缀和】
  8. 【dfs】益智游戏(2017 特长生 T2)
  9. 动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
  10. 动态规划训练24 [Phalanx HDU - 2859 ]