1. 程式人生 > >java中for和foreach迴圈

java中for和foreach迴圈

foreach

       從Java 5之後,Java提供了一種更簡單的迴圈:foreach迴圈,這種迴圈遍歷陣列和集合更加簡潔。使用foreach迴圈遍歷陣列和集合元素時,無需獲得陣列和集合長度,無需根據索引來訪問陣列元素和集合元素,foreach迴圈自動遍歷陣列和集合的每個元素。

       foreach是for語句的簡化,但是foreach並不能代替for迴圈。可以這麼說,任何foreach都能改寫為for迴圈,但是反之則行不通。

適用物件

       foreach不是Java中的關鍵字。foreach的迴圈物件一般是一個集合,List、ArrayList、LinkedList、Vector、陣列等。

foreach迴圈的語法格式如下:

for(type variableName : array|collection){
            //  variableName 自動迭代訪問每個元素。。。
}

       在上面語法格式中,type是陣列元素或集合元素的型別,variableName 是一個形參名,foreach迴圈將自動將陣列元素、集合元素依次賦值給變數。 array|collection是迴圈物件(陣列或者是集合)。

使用方式

public class fortest {

    public static void main(String[] args) {

        String [] books={"語文"
,"數學","英語","物理"}; for(String book:books){ System.out.print(book+"\t"); } System.out.println(); //結果:語文 數學 英語 物理 System.out.println("------------"); List<String> list = new ArrayList(); list.add("a"); list.add("b"
); list.add("c"); list.add("d"); for(String str : list){ System.out.print(str+"\t"); } //結果:a b c d } }

侷限性

       foreach雖然能遍歷陣列或者集合,但是隻能用來遍歷,無法在遍歷的過程中對陣列或者集合進行修改,而for迴圈可以在遍歷的過程中對原陣列或者集合進行修改。

public class fortest {

    public static void main(String[] args) {

        String [] books={"語文","數學","英語","物理"};

        for(String book:books){
            System.out.print(book+"\t");
        }
        System.out.println();

        for(int i=0;i<books.length;i++){
            books[i]="化學";
        }
        System.out.println(Arrays.toString(books));
        //結果:       [化學, 化學, 化學, 化學]
        System.out.println("------------");

        List<String> list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        for(String str : list){
            System.out.print(str+"\t");
        }

        for(int j=0;j<list.size();j++){
            list.set(j, "f");
        }

        System.out.println(Arrays.toString(list.toArray()));
        //結果:   [f, f, f, f]
    }

}

foreach賦值例項

String [] names={"張三","李四","王二","劉大"};
        for(String name:names){
            name="小明";
            System.out.println(name);
            System.out.println(Arrays.toString(names));
        }

        System.out.println("names[0]的值為:"+names[0]);

輸出結果:
小明
[張三, 李四, 王二, 劉大]
小明
[張三, 李四, 王二, 劉大]
小明
[張三, 李四, 王二, 劉大]
小明
[張三, 李四, 王二, 劉大]
names[0]的值為:張三


       從上面的執行結果來看,由於在foreach迴圈中對陣列元素進行賦值,結果導致不能正確遍歷陣列元素,不能正確地取出每個元素的值。而且當再次訪問第一個陣列元素時,發現數組元素的值依然沒有改變。不難看出,當使用foreach來迭代訪問陣列元素時,foreach中的迴圈變數相當於一個臨時變數,系統會把陣列元素依次賦給這個臨時變數,而這個臨時變數並不是陣列元素,他只是儲存了陣列元素的值。因此,如果不希望改變陣列元素的值,則不能使用這種foreach迴圈。