首页 > 代码库 > Java foreach

Java foreach

foreach循环也叫增强型的for循环,或者叫foreach循环。

foreach循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

import java.util.Arrays;public class Main {    public static void main(String[] args) {        int arr[] = new int[4];        for (int x : arr) {            System.out.println(x);        }        for (int i = 3; i > 0; i--) {            arr[i] = i;        }        System.out.println(Arrays.toString(arr));    }}
0000[0, 1, 2, 3]

对它进行修改:

import java.util.Arrays;public class Main {    public static void main(String[] args) {        int arr[] = new int[4];        for(int num:arr){            num=3;        }        System.out.println(Arrays.toString(arr));    }}
[0, 0, 0, 0]

发现修改对其无效,但是也不报错。

add:

import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Main {    public static void main(String[] args) {        String[] strArray={"111","222","333","444"};        List<String> list=new ArrayList<String>(Arrays.asList(strArray));        System.out.println(list);        for(String str:list){            System.out.println(str);            list.add("sss");            System.out.println("添加后:"+list);        }    }}
Exception in thread "main" java.util.ConcurrentModificationException[111, 222, 333, 444]    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)111    at java.util.ArrayList$Itr.next(ArrayList.java:851)添加后:[111, 222, 333, 444, sss]    at com.qhong.Main.main(Main.java:13)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:498)    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

remove:

import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Main {    public static void main(String[] args) {        String[] strArray={"111","222","333","444"};        List<String> list=new ArrayList<String>(Arrays.asList(strArray));        System.out.println(list);        for(String str:list){            System.out.println(str);            list.remove(str);            System.out.println("移除后:"+list);        }    }}
[111, 222, 333, 444]Exception in thread "main" java.util.ConcurrentModificationException111    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)移除后:[222, 333, 444]    at java.util.ArrayList$Itr.next(ArrayList.java:851)    at com.qhong.Main.main(Main.java:15)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:498)    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)Process finished with exit code 1

 

foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于添加删除和使用下标等复杂的操作。

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。

foreach循环的缺点:丢掉了索引信息。

当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。

Java foreach