首先来介绍下foreach用法。
**for(元素类型 元素变量x:遍历对象(数组或集合)){
引用元素变量x的语句;
}**
从语法结构上看,其实并不难理解。但初学者很有可能会踩雷哦!别的先不说,先来看下面例子:
普通for:
package test;
public class test {
public static void main(String[] args){
int[] array1 = {1,2,3,4};
int[] array2 = new int[6];
System.arraycopy(array1, 0, array2, 0, 4);
for(int i = 0;i<array2.length;i++){
System.out.println(array2[i]);
}
}
}
得到的结果如下:
增强for (雷区):
package test;
public class test {
public static void main(String[] args){
int[] array1 = {1,2,3,4};
int[] array2 = new int[6];
System.arraycopy(array1, 0, array2, 0, 4);
for (int i : array2) {
System.out.println(array2[i]);
}
}
}
结果如下:
咦? 怎么结果不一样呢?细心检查就会发现,输出时语法出错了
错误
System.out.println(array2[i]);
正确
System.out.println(i);
虽然这是个语法错误,改正就行。但我们要思考,为什么结果会是这样?
其实这就类似于套娃了。正确的语法,遍历后 1 2 3 4 0 0 。而错误的语法就是在这个基础上进行了一次“套娃”。过程如下:
array2[1] → 2
array2[2] → 3
array2[3] → 4
array2[4] → 0
array2[0] → 1
array2[0] → 1
看到这里,相信你已经顿悟了。