public void button(View view) {
Integer counter = Integer.valueOf(0); // 每次點擊重新創建局部變量!
counter = counter++; // 後置自增賦值無效,仍為 0
TextView score = findViewById(R.id.score);
score.setText("Score: " + counter);
}
| 問題 | 解釋 |
|---|---|
| 局部變量重複初始化 | 每次調用方法都重新創建 counter = 0 |
| 後置自增賦值無效 | counter = counter++ 先賦值再自增,結果仍為 0 |
| Integer 不可變性 | 自動拆箱/裝箱產生新對象,原變量未改變 |
public class GameActivity extends Activity {
private int score = 0; // 成員變量,生命週期隨 Activity
public void button(View view) {
score++; // 直接遞增
TextView scoreView = findViewById(R.id.score);
scoreView.setText("Score: " + score);
}
}
// 正確寫法(任選其一)
counter++; // 前置/後置自增語句獨立使用
counter = counter + 1;
counter += 1;
// 錯誤寫法
counter = counter++; // 無效!
// 保存最高分
SharedPreferences prefs = getSharedPreferences("game_prefs", MODE_PRIVATE);
int highScore = prefs.getInt("high_score", 0);
if (score > highScore) {
prefs.edit().putInt("high_score", score).apply();
}
i++ 返回原值再自增,++i 先自增再返回Integer 運算會創建新對象,需重新賦值將計數器提升為成員變量,使用正確的自增語法,是解決分數歸零的根本方案。建議夯實 Java 基礎後再進行 Android 開發。