
for-each 循环(增强型 for 循环)在 java 中仅用于遍历读取数组或集合元素,其内部使用的是值拷贝而非引用,因此无法通过它直接修改原始数组中的值。
for-each 循环(增强型 for 循环)在 java 中仅用于遍历读取数组或集合元素,其内部使用的是值拷贝而非引用,因此无法通过它直接修改原始数组中的值。
在 Java 中,for (int ele : marks) 语句的本质是:每次迭代时,将数组当前元素的值复制给局部变量 ele(即“按值传递”)。你对 ele 的赋值(如 ele = sc.nextInt())仅改变了这个临时变量的值,而不会影响原数组 marks 中对应位置的元素。这就是为什么输入了 23 45 100 后,打印结果仍是 0 0 0——数组本身从未被更新。
✅ 正确做法:使用传统 for 循环,通过索引显式访问并修改数组元素:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
import java.util.Scanner;
public class JavaArrays {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] marks = new int[3];
// ✅ 正确:通过索引赋值
for (int i = 0; i <p>⚠️ 注意事项: </p>
- for-each 是只读遍历语法糖,适用于不需要索引、不修改源数据的场景(如打印、求和、查找等);
- 若需修改数组/列表元素,必须使用传统 for 循环(基于索引)或 List.set()(针对可变列表);
- 对于基本类型数组(如 int[]),因不存在“引用传递”,任何试图通过 for-each 修改的操作都无效;
- 即使是对象数组(如 String[]),for-each 中修改 ele 的引用(如 ele = new String("x"))也不会改变原数组内容——除非调用对象的内部状态方法(如 ele.append("a") 对 StringBuilder[] 有效),但这依赖于对象的可变性,且易引发混淆,不推荐作为赋值手段。
总结:牢记 “for-each 用于读,for-i 用于写” ——这是 Java 数组操作的基本原则,也是避免此类逻辑错误的关键。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










