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

Java 循環中變量定義位置差異:引用陷阱與 new 關鍵字

     編輯:程式設計綜合問答

現象對比

// 循環外定義
ReportInfo temp = new ReportInfo();
while (cursor.moveToNext()) {
    temp.setXxx(...);
    list.add(temp); // 每次添加同一引用
}
// 結果:list 中全是最後一條數據的引用

// 循環內定義
while (cursor.moveToNext()) {
    ReportInfo temp = new ReportInfo(); // 每次新對象
    temp.setXxx(...);
    list.add(temp);
}
// 結果:list 包含所有不同對象

核心解析

  • 引用類型變量存儲的是對象地址。循環外 `new` 一次,後續 `setXxx` 修改的是同一對象,`list.add(temp)` 添加的都是同一地址引用。
  • 循環內每次 `new`,分配新內存地址,`add` 存入不同引用,數據互不干擾。

修正寫法(循環外也可)


ReportInfo temp = null;
while (cursor.moveToNext()) {
    temp = new ReportInfo(); // 關鍵:每次重新 new
    temp.setXxx(...);
    list.add(temp);
}

記住口訣

「引用變量放循環外,new 必須放循環內」。基本類型無此問題。

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