Java for 循环和 for-each 循环的区别

2025年6月4日 | 阅读 5 分钟

循环是一种在特定条件保持为真时多次重复特定代码块的方法。编程语言通常提供不同种类的循环来处理重复,例如 while、do-while 和 for 循环,每种都适用于略微不同的场景。

Java for 循环

在 Java 中,for 循环是一种常见的编程结构,用于实现重复。换句话说,我们多次运行一段代码,无论是固定的步数,还是直到某个特定条件为真。它很灵活,因为我们可以在一行中定义循环的开始、停止时间和每一步的进展。

语法

要阅读更多关于 Java for 循环 的内容

让我们看一些例子来理解传统 for 循环的工作原理

示例 1:遍历数组

示例

编译并运行

输出

1
2
3
4
5

解释:在此示例中,我们使用标准的 for 循环遍历一个整数数组并输出每个元素。循环结构明确定义了条件(i < numbers.length)、更新(i++)和初始化(int i = 0)语句。

示例 2:遍历列表

示例

编译并运行

输出

apple
banana
cherry

解释:上面的代码展示了如何使用经典的 for 循环遍历列表。循环控制结构的三部分与数组示例中的组件基本相同。

Java for-each 循环

for-each 循环(或 Java 中的增强 for 循环)是一种特殊用途的循环,它作用于集合或数组。当然,在 for-each 循环的情况下,我们无需关心索引或计数器。它旨在使遍历数组或集合更具可读性且不易出错。

语法

要阅读更多关于 for-each 循环 的内容

让我们通过一些例子来探索增强的 for-each 循环是如何工作的

示例

编译并运行

输出

1
2
3
4
5

解释:在此示例中,我们使用增强的 for-each 循环遍历一个整数数组。循环会将每个元素直接赋给 num 变量,从而省去了更新语句和索引变量。

示例 2:遍历列表

示例

编译并运行

输出

apple
banana
cherry

解释:这小段代码说明了使用扩展 for-each 循环遍历列表的简单性。循环变量 fruit 直接代表集合中的当前元素。

Java for 循环与 for-each 循环

特性For 循环For-each 循环
索引控制我们完全控制索引。我们可以手动增加、减少甚至跳过某些值。我们在这里不处理索引。它只是自动逐个元素移动,而无需您管理位置。
灵活性非常灵活,我们可以决定从哪里开始、在哪里停止、移动速度有多快,甚至可以反向循环。灵活性较低,就像它按顺序从开始到结束一样,一次一个元素。
可读性这可能会有点复杂,尤其是当我们使用索引进行数学运算时。当我们只想查看每个项目时,它要干净得多,也更容易阅读。
用例当我们处理特定位置或基于索引修改元素时,应该使用它。当我们只是读取或打印值而不用担心其位置时,应该使用它。
修改能力我们可以直接使用索引更改元素不适合更改项目,我们只获取每个元素的副本,因此更新不会影响原始集合。
循环方向完全取决于我们:我们可以正向循环、反向循环,甚至可以跳步。始终从第一个元素到最后一个元素。
错误风险如果我们不小心,可能会稍微高一点的“越界”错误或索引问题。更安全,因为我们不处理索引或手动检查。

结论

增强的 for-each 循环和传统的 for 循环都是 Java 开发人员有用的工具,并提供了优势。选择哪一个将取决于我们代码的具体要求。如果您需要对迭代进行细粒度控制或进行更复杂的任务,那么经典的 for 循环是最佳选择。但是,如果您只是遍历集合并希望获得更清晰、更简洁的代码,那么增强的 for-each 循环是更好的选择。

实际上,许多开发人员倾向于在可行的情况下使用增强的 for-each 循环,因为它通常可以产生更易于理解和更美观的代码,而将经典的 for 循环留给需要更精确控制的情况。

Java for 循环与 for-each 循环 MCQs

1. 在 Java 中,何时更适合使用常规 for 循环?

  1. 当一个人只想逐个读取每个元素时
  2. 当一个人不想担心索引时
  3. 当一个人需要访问特定位置或按索引更改值时
  4. 当一个人只处理字符串时

答案:C)

解释:当一个人需要访问特定位置或按索引更改值时,可以使用循环。


2. 当我们只是打印列表或数组中的每个项目时,哪种循环更简单?

  1. While 循环
  2. 传统 for 循环
  3. For each 循环
  4. Do-while 循环

答案:C)

解释:for-each 循环更简单,因为我们不需要处理索引。


3. for-each 循环无法直接做的一件事是什么?

  1. 遍历数组
  2. 遍历列表
  3. 更改数组或列表中的原始元素
  4. 打印每个项目

答案:C)

解释:for-each 循环不适合更改项目,因为我们只获取每个元素的副本,因此更新不会影响原始集合。


4. 哪种循环让您可以自由地从末尾开始、跳过元素或反向循环?

  1. For each 循环
  2. For 循环
  3. 两者

答案:C)

解释:for 循环允许跳过元素,或反向循环或从末尾开始。


5. 为什么 for-each 循环通常被认为更安全的选择?

  1. 它只能与数字一起使用
  2. 它避免了开发人员有时会犯的常见索引错误
  3. 它不使用内存
  4. 它会自动对元素进行排序

答案:B

解释:for each 循环通常被认为是一个更安全的选择,因为它在迭代时不对索引进行操作。它只是自动逐个元素移动。