Java深拷貝淺拷貝

在Java中,深拷貝和淺拷貝是兩種不同的對象復制方式。

  1. 淺拷貝:創建一個新對象,然后將原對象的非靜態字段復制到新對象中。如果字段是值類型的,那么對該字段執行逐位復制。如果字段是引用類型的,則復制引用但不復制引用的對象。因此,原始對象及其副本引用同一個對象。

  2. 深拷貝:創建一個新對象,并將原對象的非靜態字段復制到新對象中。如果字段是值類型的,那么對該字段執行逐位復制。如果字段是引用類型的,則遞歸地復制引用的對象,直到遇到值類型為止。因此,原始對象及其副本引用不同的對象。

以下是一個簡單的Java代碼示例,展示了淺拷貝和深拷貝的區別:

class Person implements Cloneable {String name;int age;Address address;public Person(String name, int age, Address address) {this.name = name;this.age = age;this.address = address;}// 淺拷貝public Object clone() throws CloneNotSupportedException {return super.clone();}// 深拷貝public Person deepClone() {return new Person(new String(this.name), this.age, new Address(this.address.city, this.address.street));}
}class Address {String city;String street;public Address(String city, String street) {this.city = city;this.street = street;}
}public class Main {public static void main(String[] args) throws CloneNotSupportedException {Address address = new Address("北京", "朝陽路");Person person1 = new Person("張三", 30, address);Person person2 = (Person) person1.clone(); // 淺拷貝Person person3 = person1.deepClone(); // 深拷貝System.out.println("person1: " + person1.address.city + ", " + person1.address.street);System.out.println("person2: " + person2.address.city + ", " + person2.address.street);System.out.println("person3: " + person3.address.city + ", " + person3.address.street);person1.address.city = "上海";System.out.println("修改person1的地址后:");System.out.println("person1: " + person1.address.city + ", " + person1.address.street);System.out.println("person2: " + person2.address.city + ", " + person2.address.street);System.out.println("person3: " + person3.address.city + ", " + person3.address.street);}
}

輸出結果:

person1: 北京, 朝陽路
person2: 北京, 朝陽路
person3: 北京, 朝陽路
修改person1的地址后:
person1: 上海, 朝陽路
person2: 上海, 朝陽路
person3: 北京, 朝陽路

從輸出結果可以看出,淺拷貝時,person1和person2引用的是同一個Address對象,而深拷貝時,person1和person3引用的是兩個不同的Address對象。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17552.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAP 根據報錯消息號快速定位問題

通常用戶在業務的操作過程中,經常會遇到報錯信息,有些報錯是系統控制拋出的信息,但是有些報錯的信息是根據不同地點業務場景對填寫的數據進行判斷校驗,然后給出的報錯信息,正常情況報錯信息一般是有文本,或…

【C語言】文件操作講解

C語言文件操作講解 文件文件名文件類型數據在內存中的存儲 文件緩沖區文件指針文件的打開與關閉fopenfclosefopen與fclose的使用文件的打開方式 文件的順序讀寫fputcfgetcfputsfgetsfprintffscanffwritefread輸入流與輸出流對比scanf\fscanf\sscanf與printf\fprintf\sprintfssc…

【區分vue2和vue3下的elementUI和elementUI Plus的button組件,介紹如何安裝,屬性,事件,方法等以及使用案例】

區分vue2下的Element UI和vue3下的Element Plus的Button組件 Element UI (vue2) Button組件:基于Vue 2的Element UI庫中的Button組件提供了多種樣式和類型,如默認、主要、成功、警告、危險等。 Element Plus (vue3) Button組件:作為Element …

匯編原理(二)寄存器——內存訪問

一個字 兩個字節 雙字 字節為8位 字為16位(看兩格) 雙子dword32位(看四格) 內存中字的存儲: 0地址單元中存放的字節型數據是多少? 0地址字單元中存放的字型數據是多少? 2地址字單元中存放…

Secure Operation

文章目錄 Secure Summation OperationSecure Set Union Operation Secure Summation Operation 讓我們通過一個具體的例子來說明這個算法。 假設有三個數據擁有者 S1, S2 和 S3,他們分別持有以下值: S1 持有 value1 10S2 持有 value2 20S3 持有 val…

基坑氣膜:建筑工地環保新利器—輕空間

隨著城市化進程的加快,建筑行業的飛速發展帶來了嚴重的環境問題,如噪音和粉塵污染,給人們的生活帶來諸多不便。為了解決這些問題,建筑行業一直在探索更為環保和高效的施工方式。近年來,基坑氣膜技術逐漸嶄露頭角&#…

Audition 2024 for Mac/Win:音頻錄制與編輯的卓越之選

隨著數字媒體的不斷發展,音頻內容創作已經成為各行各業中不可或缺的一部分。無論是音樂制作、廣播節目、播客錄制還是影視配音,都需要高品質的音頻錄制和編輯工具來實現專業水準的作品。在這個充滿競爭的時代,要想在音頻創作領域脫穎而出&…

解線性方程組——最速下降法及圖形化表示 | 北太天元 or matlab

一、思路轉變 A為對稱正定矩陣, A x b Ax b Axb 求解向量 x x x這個問題可以轉化為一個求 f ( x ) f(x) f(x)極小值點的問題,為什么可以這樣: f ( x ) 1 2 x T A x ? x T b c f(x) \frac{1}{2}x^TAx - x^Tb c f(x)21?xTAx?xTbc 可…

ZooKeeper安裝

安裝Zookeeper 1、下載Zookeeper安裝包 打開鏈接選擇一個版本進行下載 https://zookeeper.apache.org/releases.html2、上傳Zookeeper安裝包到集群 輸入命令 scp apache-zookeeper-3.8.4-bin.tar.gz hadoop192.168.88.100:/tmp也可以使用xftp等上傳,物理機用u盤…

Python 網格變換之平移、旋轉、縮放、變換矩陣

網格變換 一、平移1.1、代碼示例1.2、結果示例二、旋轉2.1、代碼示例2.2、結果示例三、縮放3.1、代碼示例3.2、結果示例四、變換矩陣4.1、代碼示例4.2、結果示例一、平移 網格平移:將網格沿著特定的方向移動一段距離。 1.1、代碼示例

Android實現無線連接ADB調試

無線連接ADB(Android Debug Bridge)進行調試,是一種方便的遠程調試方式,尤其適合在沒有USB線或者設備物理接觸不便的情況下使用。下面是如何設置無線ADB調試的步驟: 1. 準備工作 確保你的電腦和Android設備連接在同一局域網(Wi-Fi)下。 2. 在Android設備上操作 允許…

hadoop其中一個節點壞了,用其他節點克隆的教程+datanode正常顯示,但master只有1個livenodes

如果一個slave出了非常棘手的問題,還是用其他slave克隆吧,很快的。 克隆教程: 1.克隆后只需要:sudo gedit /etc/network/interfaces,把ip地址改好。 2.ssh不需要重新設置,其他東西也都不需要重新進行設置…

linux日常運維2

下載linux離線安裝包---- 利用 Downloadonly 插件下載 RPM 軟件包及其所有依賴包 1. 先找個可以上網的linux操作系統,這里是以centos7操作系統為例,如果要使用centos6就先安裝一個centos6的系統,然后讓他可以上網,后面步驟如下 a.…

《精通Stable Diffusion AI繪畫:基礎技巧、實戰案例與海量資源一站式學習》

隨著人工智能技術的迅猛發展,AI繪畫已經成為了一個炙手可熱的話題。特別是在設計、藝術和創意領域,AI繪畫工具的出現無疑為創作者們帶來了更多的可能性和便利。《Stable Diffusion AI繪畫從提示詞到模型出圖》這本書,就是一本深入解析Stable …

打包遷移Python env環境

打包遷移Python env環境 平常工作中可能遇到python虛擬環境遷移的場景,總結了如下幾個方法。適用于同架構、相同類型系統之間的python虛擬環境遷移。 方法一:使用pip freeze和requirements.txt 這種方法將當前環境中的所有包記錄到一個文件中&#xff0c…

恢復視頻3個攻略:從不同情況下的恢復方法到實踐!

隨著科技的進步,我們的生活被各種各樣的數字內容所包圍,其中,視頻因其獨特的記錄性質,承載著許多重要的資料。但不管是自媒體人還是普通人日常生活隨手一拍,都會遇到誤刪視頻的情況。為了幫助您找回手機視頻&#xff0…

從零學爬蟲:使用比如說說解析網頁結構

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、引言 二、網頁結構概述 示例:查看網頁結構 三、使用比如說說解析網頁 1.…

windows10更改文件默認打開軟件

📚博客主頁:knighthood2001 ?公眾號:認知up吧 (目前正在帶領大家一起提升認知,感興趣可以來圍觀一下) 🎃知識星球:【認知up吧|成長|副業】介紹 ??感謝大家點贊👍&…

使用ollama + webui+docker 運行任意大模型

🏡 Home | Open WebUI 如果您的計算機上有 Ollama,請使用以下命令: docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/o…

【Vue】跨域問題解決

Vue列文章目錄 【Vue】數據監測原理 【Vue】生命周期 【Vue】組件化編程 【Vue】組件用法 前言 … 目標 proxy代理的用法 #mermaid-svg-ZYJUqv8HPXLA3ecR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZYJUqv8HPX…