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

Java List 存儲同一對象引用導致數據覆蓋問題

     編輯:程式設計疑難解答

問題現象

向 List 重複添加同一個對象實例,修改其中一個元素屬性導致所有元素數據同步變化。

原因

List 存儲的是對象引用。若多次添加同一 new Object(),所有索引指向堆上同一內存地址。

解決方案

定義實體類封裝數據,每次添加創建新實例:

public class WeatherInfo {
    public String city;
    public String temperature;
}

// 使用
List list = new ArrayList<>();
WeatherInfo info1 = new WeatherInfo();
info1.city = "北京";
info1.temperature = "晴 25℃";
list.add(info1);

WeatherInfo info2 = new WeatherInfo(); // 新實例
info2.city = "上海";
info2.temperature = "多雲 22℃";
list.add(info2);

關鍵原則

  • 每條業務數據對應一個獨立對象實例。
  • 循環中創建對象放在循環內部,而非外部復用。
  • 若需複製現有對象,實現 clone() 或拷貝構造函數創建新實例。

理解引用語義,避免「同一對象多處引用」導致的邏輯錯誤。

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