IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素

从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据索引来访问数组元素或集合元素,foreach循环自动遍历数组或集合的每个元素。

foreach循环的语法格式如下:

for(type variableName:array|collection){

//variableName自动迭代访问每个元素

}

在上面语法格式中,type是数组元素或集合元素的类型,variableName是一个形参名,foreach循环将自动将数组元素、集合元素依次赋给该变量。下面程序示范了如何使用foreach循环遍历数组元素:

public class ArrDemo{

public static void main(String[] args){

int[] arr = {1,2,3,4,5,6,7};

for(int num : arr){

System.out.println(num);

}

}

}

编译并运行这个程序,控制台将显示如图1所示的信息。

IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素

图1  ArrDemo运行结果

上面的代码使用foreach循环依然可以遍历了数组中的每个元素并输出在控制台,而无需获得数组的长度,也无需根据索引来访问数组元素,foreach循环和普通的循环不同的是,它无须循环条件,无须循环迭代语句,这些部分都由系统来完成,foreach循环自动迭代数组的每个元素,当每个元素都被迭代一次后,foreach循环自动结束。

当使用foreach循环来迭代输出数组元素或集合元素时,通常不要对循环变量进行赋值,虽然这种赋值语句在语法上是允许的,但是没有太大的意义,而且极容易引起错误。例如下面的程序。

public class ForEachArrError{

public static void main(String[] args){

String[] books = {"Java从入门到出家",

"Oracle从入门到删库跑路","PHP从入门到出轨"};

for(String book : books){

book = "C语言从入门到抑郁症康复";

System.out.println(book);

}

System.out.println(books[0]);

}

}

编译并运行这个程序,控制台将显示如图2所示的信息。

IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素

图2  ForEachArrError运行结果

从上面运行结果看,由于在foreach循环中对数组元素进行赋值,结果导致不能正确遍历数组元素,不能正确地取出每个数组元素的值。而且当再次访问第一个素组元素时,发现数组元素的值依然没有改变。不难看出,当使用foreach来迭代访问数组元素时,foreach中的循环变量相当于一个临时变量,系统会把数组元素一次赋给这个临时变量,而这个临时变量不是数组元素,它只是保存了数组元素的值。因此,如果希望改变数组元素的值,则不能使用这种foreach循环。

上一篇:JavaScript基础精华03(String对象,Array对象,循环遍历数组,JS中的Dictionary,Array的简化声明)


下一篇:Spring -- 注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。