foreach
在遍历数组、集合方面,foreach
为开发者提供了极大的方便。foreach
循环语句是 for
语句的特殊简化版本,主要用于执行遍历功能的循环。
foreach
循环语句的语法格式如下:
for(数据类型 变量名:数组) {
需要执行的语句块;
}
举一个简单的例子:
int[] numbers = {45,65,21,31,12};
System.out.println("利用for——each语句打印数组的内容");
// for-each语句
for (int abc : numbers) {
System.out.println("数组中的内容为" + abc);
}
简单解释一下如何快速上手使用这个语句:数据类型(即你需要打印的集合(数组)元素类型),变量名(按你自己的喜好取就可以了),数组(即你需要打印的数组名)。在循环体执行的过程中,每循环一次,会将numbers
数组中的一个元素赋值给 adc
变量,直到遍历 numbers
数组中所有元素,循环终止。
我们来看看上面的代码运行的结果:
如果我们不使用for—each
语句的话,我们写的代码会比较麻烦,当然这也是Java这门语言的特色之一,提供给我们很多非常便利的方法,我们来看看普通代码是怎样的:
public class text {
public static void main(String[] args) {
int [] numbers={45,65,21,31,12};
for(int i =0;i<numbers.length;i++){
System.out.println(numbers[i]);
}
}
}
通过上诉代码的对比我们可以知道:foreach
循环和普通循环不同的是,它无须循环条件,无须循环迭代语句,这些部分都由系统来完成,foreach
循环自动迭代数组的每个元素,当每个元素都被迭代一次后,foreach
循环自动结束。并且 foreach
循环遍历数组元素时无须获得数组长度,也无须根据索引来访问数组元素。
对于很多初学foreach
语句的人来说就开始有疑问了,既然我能够遍历整个数组,那么我是不是也可以利用foreach
语句对数组进行赋值呢?
下面我们来尝试一下:
int[] numbers = {45,65,21,31,12};
System.out.println("利用for——each语句打印数组的内容");
// for-each语句
for (int abc : numbers) {
abc=58;
System.out.println("数组中的内容为" + abc);
}
System.out.println(numbers[0]);
结果如下:
其实我们不难从上面的代码运行结果看出来:当使用 foreach
来迭代访问数组元素时,foreach
中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,然后再一个一个的打印出来,而这个临时变量并不是数组元素,它只是保存了数组元素的值。因此,如果希望改变数组元素的值,则不能使用这种 foreach
循环。
所以在使用 foreach
循环迭代数组元素时,并不能改变数组元素的值,因此不要对 foreach
的循环变量进行赋值。