电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

探討Java中的深淺拷貝問題

瀏覽:4日期:2022-08-09 17:11:16
目錄一、前言二、淺拷貝三、深拷貝一、前言

拷貝這個詞想必大家都很熟悉,在工作中經常需要拷貝一份文件作為副本。拷貝的好處也很明顯,相較于新建來說,可以節省很大的工作量。在Java中,同樣存在拷貝這個概念,拷貝的意義也是可以節省創建對象的開銷。

Object類中有一個方法clone(),具體方法如下:

protected native Object clone() throws CloneNotSupportedException;

1.該方法由 protected 修飾,java中所有類默認是繼承Object類的,重載后的clone()方法為了保證其他類都可以正常調用,修飾符需要改成public。

2.該方法是一個native方法,被native修飾的方法實際上是由非Java代碼實現的,效率要高于普通的java方法。

3.該方法的返回值是Object對象,因此我們需要強轉成我們需要的類型。

4.該方法拋出了一個CloneNotSupportedException異常,意思就是不支持拷貝,需要我們實現Cloneable接口來標記,這個類支持拷貝。

為了演示方便,我們新建兩個實體類Dept 和 User,其中User依賴了Dept,實體類代碼如下:

Dept類:

@Data@AllArgsConstructor@NoArgsConstructorpublic class Dept { private int deptNo; private String name;}

User類:

@Data@AllArgsConstructor@NoArgsConstructorpublic class User { private int age; private String name; private Dept dept;}二、淺拷貝

對于基本類型的的屬性,淺拷貝會將屬性值復制給新的對象,而對于引用類型的屬性,淺拷貝會將引用復制給新的對象。而像String,Integer這些引用類型,都不是不可變的,拷貝的時候會創建一份新的內存空間來存放值,并且將新的引用指向新的內存空間。不可變類型是特殊的引用類型,我們姑且認為這些final類型的應用也是復制值。

探討Java中的深淺拷貝問題

淺拷貝功能實現

@Data@AllArgsConstructor@NoArgsConstructorpublic class User implements Cloneable{ private int age; private String name; private Dept dept; @Override protected Object clone() throws CloneNotSupportedException {return super.clone(); }}

如何驗證我們的結論呢?首先對比被拷貝出的對象和原對象是否相等,不等則說明是新拷貝出的一個對象。其次修改拷貝出對象的基本類型屬性,如果原對象的此屬性發生了修改,則說明基本類型的屬性是同一個,最后修改拷貝出對象的引用類型對象即Dept屬性,如果原對象的此屬性發生了改變,則說明引用類型的屬性是同一個。清楚測試原理后,我們寫一段測試代碼來驗證我們的結論。

public static void main(String[] args) throws Exception{ Dept dept = new Dept(12, '市場部'); User user = new User(18, 'Java旅途', dept); User user1 = (User)user.clone(); System.out.println(user == user1); System.out.println(); user1.setAge(20); System.out.println(user); System.out.println(user1); System.out.println(); dept.setName('研發部'); System.out.println(user); System.out.println(user1);}

上面代碼的運行結果如下

false

User{age=18, name=’Java’, dept=Dept{deptNo=12, name=’市場部’}}

User{age=20, name=’Java’, dept=Dept{deptNo=12, name=’市場部’}}

User{age=18, name=’Java’, dept=Dept{deptNo=12, name=’研發部’}}

User{age=20, name=’Java’, dept=Dept{deptNo=12, name=’研發部’}}

三、深拷貝

相較于淺拷貝而言,深拷貝除了會將基本類型的屬性復制外,還會將引用類型的屬性也會復制。

探討Java中的深淺拷貝問題

深拷貝功能實現

在拷貝user的時候,同時將user中的dept屬性進行拷貝。

dept類:

@Data@AllArgsConstructor@NoArgsConstructorpublic class Dept implements Cloneable { private int deptNo; private String name; @Override public Object clone() throws CloneNotSupportedException {return super.clone(); }}

user類:

@Data@AllArgsConstructor@NoArgsConstructorpublic class User implements Cloneable{ private int age; private String name; private Dept dept; @Override protected Object clone() throws CloneNotSupportedException {User user = (User) super.clone();user.dept =(Dept) dept.clone();return user; }}

使用淺拷貝的測試代碼繼續測試,運行結果如下:

false

User{age=18, name=’Java旅途’, dept=Dept{deptNo=12, name=’市場部’}}

User{age=20, name=’Java旅途’, dept=Dept{deptNo=12, name=’市場部’}}

User{age=18, name=’Java旅途’, dept=Dept{deptNo=12, name=’研發部’}}

User{age=20, name=’Java旅途’, dept=Dept{deptNo=12, name=’市場部’}}

除此之外,還可以利用反序列化實現深拷貝,先將對象序列化成字節流,然后再將字節流序列化成對象,這樣就會產生一個新的對象。

以上就是探討Java中的深淺拷貝問題的詳細內容,更多關于Java深淺拷貝的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 尾轮组_头轮组_矿用刮板_厢式刮板机_铸石刮板机厂家-双驰机械 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 鼓风干燥箱_真空烘箱_高温干燥箱_恒温培养箱-上海笃特科学仪器 | 广东教师资格网-广东教师资格证考试网 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 | 步进电机_agv电机_伺服马达-伺服轮毂电机-和利时电机 |