首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 陣列複製:clone() 可用但淺拷貝,物件陣列需深拷貝

     編輯:程式設計綜合問答

網上常說不建議用 `clone()` 複製陣列,為何?

分析

  • 基本型別陣列(`int[]`、`double[]`):`clone()` 產生**新陣列**,元素逐值複製,**完全獨立**,可放心使用。
  • 物件參考陣列(`String[]`、`User[]`):`clone()` 只複製**參考**,新舊陣列指向**同一個物件**,修改物件內容會互相影響(**淺拷貝**)。
  • `clone()` 回傳 `Object` 需強制轉型,且需實作 `Cloneable` 介面(陣列隱含實作),物件類別若未正確覆寫 `clone()` 易拋 `CloneNotSupportedException`。

推薦替代

  • 基本型別:`Arrays.copyOf(arr, arr.length)` 或 `arr.clone()` 皆可。
  • 物件陣列需**深拷貝**:逐元素 `new User(u.getName(), u.getAge())`、序列化反序列化、或用 Stream `Arrays.stream(arr).map(u -> new User(u)).toArray(User[]::new)`。

結論:`clone()` 並非禁用,**理解淺/深拷貝差異**後按需選擇即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved