1 static boolean foo(char c) { 2 System.out.println(c); 3 return true; 4 } 5 6 public static void main(String[] args) { 7 int i = 0; 8 for (foo('a'); foo('b') && (i < 2); foo('c')) { 9 i++; 10 foo('d'); 11 } 12 }
代碼執行結果:a b d c b d c b
做這道面試題之前我們要了解for語句
1.各部分執行的順序
2.各部分執行的次數
3.循環的終止條件
分號之前第一部分是初始化語句也就是foo('a')所以只會執行一次,第二部分是循環終止控制,也就是循環條件當foo('b') && (i<2)為false時條件就會終止,所以循環會執行兩次
第三部分在每次循環完畢時執行,所以執行順序是先foo('a')所以先打印a,再次執行foo('b')並且判斷條件i<2 條件是否滿足,滿足的話進入循環體,然后i++ i等於1,然后執行foo('d')
再打印d ,執行完畢再執行foo('c')打印c,這是循環一次的結果 abdc,第二遍循環,因為a是初始化變量所以只執行一次,直接執行循環條件,先執行foo('b')並且判斷i<2條件是
否滿足,現在i是1所以條件滿足進入循環體,執行i++,再次執行foo('d'),循環完畢執行('c')然后打印c,循環第二遍的結果是bdc,這時循環還會繼續執行,因為它還不知道
i是否小於2,初始化變量不執行,執行循環條件,先執行foo('b')打印b然后判斷循環條件,現在i等於2所以i<2的條件不滿足,所以循環結束