关于Object.clone克隆方法的测试
【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克隆方法的测试相关推荐
- cloning java_深入浅出Java中的clone克隆方法,写得太棒了!
作者:张纪刚 blog.csdn.net/zhangjg_blog/article/details/18369201/ 2019-03-24 10:33:04 Java中对象的创建 clone 顾名思 ...
- 深入浅出Java中的clone克隆方法,写得太棒了!
作者:张纪刚 blog.csdn.net/zhangjg_blog/article/details/18369201/ Java中对象的创建 clone 顾名思义就是 复制 , 在Java语言中, c ...
- 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 ...
- Flex通用克隆(clone)方法
为每个Vo一一书写clone()方法是一件麻烦事,利用flex的反射功能可实现较通用的克隆方法,本方法可保留类型信息,比flex自带的ObjecProxy的copy()和clone()好用哦,代码如下 ...
- JavaSE(六)——Object类、克隆方法
文章目录 1. Object类 1.1 定义 1.2 常用方法 2. 克隆方法 2.1 定义 2.2 对象浅克隆要注意的细节 1. Object类 1.1 定义 Object类是顶层父类,所有的类都直 ...
- 关于Java的Object.clone()方法与对象的深浅拷贝,java面试题,java初级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 文章 ...
- Java对象克隆方法(浅克隆、深克隆)
要让一个对象进行克隆,其实就是两个步骤: 1. 让该类实现java.lang.Cloneable接口: 2. 重写(override)Object类的clone()方法. 上面的克隆方法其实是浅克隆, ...
- 返回对应对象的克隆方法
代码 using System; using System.Collections.Generic; using System.Text; using System.Collections; usin ...
- JDK源码解析——Object的hashCode方法
目录 前言 说明 一.源码目录结构 (1).JDK目录 (2).hotspot目录 二.基础知识 (1).Object Header(对象头) (2).Lock(锁) 1. 无锁 => 偏向锁 ...
最新文章
- 总结一些java编程题的思路
- Hive 空值、NULL判断
- 单片机小白学步系列(十六) 单片机/计算机系统概述:模块化思想
- 办公室分配方案python_Python自动化办公室(1),python,一
- 数学建模-7.多元线性回归分析
- 构建元宇宙概念NFT商城系统——艺术数字藏品平台源码部署
- mysql增加约束sql语句_sql语句添加约束
- Bootstrap优秀模板-INSPINIA.2.9.2
- html5在线制作网站模板,快速建站 20个设计优秀的HTML网站模板(免费)
- 【最新黑苹果】Big Sur/Win双系统-小米笔记本pro/gtx 安装教程!
- DirectX11:DirectX11下载和环境配置
- VMware、vSphere 6.0 网络和存储配置
- nmds与mds的区别_数量生态学笔记||非约束排序|NMDS
- C++变量前面加下划线的含义
- 解决“无法删除文件:无法读源文件或磁盘”的方法(chkdsk)
- Unable to open shape_predictor_68_face_landmarks.dat
- Python 一键导出微信读书的书籍和笔记
- (五) 数据结构 - 归并排序
- Android Switch和ToggleButton控件
- java将内容写入文件,纯干货
热门文章
- 【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】
- [2021-09-09 T3] 序列/luogu P3943 星空(异或差分+bfs最短路+状压dp)
- 洛谷P4389:付公主的背包(多项式、生成函数)
- 上帝造题的七分钟(ybtoj-树状数组)
- POJ3348-Cows【凸包,计算几何】
- ssl提高组周六备考赛【2018.10.27】
- P2280-激光炸弹【二维前缀和】
- 【dfs】益智游戏(2017 特长生 T2)
- 动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
- 动态规划训练24 [Phalanx HDU - 2859 ]