1. 程式人生 > >易混淆點驗證

易混淆點驗證

1. 短路

規則:

邏輯與&&以及邏輯或||會產生短路現象:

若&&前表示式為假, 則程式不會檢查並執行&&後的表示式, 因為邏輯與左右有一假則結果必假

若||前表示式為真, 則程式不會檢查執行||前的表示式, 因為邏輯或左右只需一真則結果必真

驗證: 

  int a=1;
  System.out.println(a<0&&a/0==0?"程式崩潰":"不會檢查執行a/0");

結果:

image.png

2. 自增規則

"++"  "--"

規則: 

前置的自增 自減運算子會先將變數的值加一或者減一, 再讓該變數參與表示式的運算

後置的自增 自減運算子會先讓變數參與表示式的運算,再將該變數的值加一或者減一

b=a++; → b=a; a=a+1;

b=++a; → a=a+1; b=a;

驗證:

int a=1;
int b=(a++)+(++a);
System.out.println("b="+b+"\na="+a);

結果:

image.png

分析:

先執行(++a), 此時a=2; 再執行b=a+(a), 則b=4; 再執行(a++), 此時a=3;

3. 驗證continue執行

規則:

執行continue之後, 將跳過本次迴圈結束前的語句, 回到迴圈的條件測試部分, 重新開始執行迴圈

對於for迴圈中執行continue, 將立即執行迴圈的第三表達式, 即增量部分, 再進行條件測試

對於while或者do...while迴圈, 則直接開始下一次迴圈(包括條件測試部分)

驗證:

for(int i=1;i<=5;i++) {
  System.out.println(i);
  if(i==3)
    continue;
  System.out.println("mark");
}

結果:

image.png

分析:

滿足條件i==3後, continue跳過迴圈後面的"mark"顯示語句, 但i仍舊執行自增, 表示continue不會跳過for迴圈的第三個表示式