(1) 警戒自增的陷阱
java
java一元運算符有++,--, i++表示先賦值後加1,++i表示先加1後賦值,--同理,可是若是遇到如下代碼,你恐怕是陰溝裏翻船,很少說,看代碼:算法
public static void main(String[] args) {ide
int count = 0;spa
for (int i = 0; i < 10; i++) {it
count = count++;class
}變量
System.out.println("count:"+count);循環
}引用
貌似是count自加10次,等於10嗎?運行結果是0, 由於java對自加的處理是:首先把count的值(不是引用),拷貝到一個臨時變量區,而後對count變量加1,最後返回臨時變量區的值,詳細步驟:程序
步驟1: JVM把count值(當前值爲0)拷貝到臨時變量區
步驟2: count值加1,這時候count的值是0
步驟3: 返回臨時變量區的值,注意這個值是0,沒修改過
步驟4: 返回值賦給count,此時count值又被重置爲0,如此循環n次都是一樣的結果。
能夠將count = count++ 改爲 count++便可.
(2)break不可丟,尤爲是switch結構中
break能夠用於終止一段代碼的運行,好比循環中break用於跳出整個循環結構,switch用於跳出一個case分支而且不進入其餘分支結構的做用,這很重要,不信你看:
String str = "";
int num = 2;
switch (num) {
case 0: str = "零";
case 1: str = "壹";
case 2: str = "貳";
case 3: str = "叄";
case 4: str = "肆";
case 5: str = "伍";
case 6: str = "陸";
case 7: str = "柒";
case 8: str = "捌";
case 9: str = "玖";
case 10: str = "拾";
}
System.out.println(str);
打印的結果是:拾, 這是由於switch結構中,case分支判斷成立後,執行case塊中的代碼,執行完成後,若是沒有遇到break關鍵值,後面的case分支都不進行條件判斷,直接執行後面的全部case塊代碼,這太可怕了.
(3)奇偶判斷沒你想的那麼隨便.
什麼是奇數,什麼是偶數? 能被2整除的除數爲偶數,反之則爲奇數, 衆所周知,那麼程序判斷是否也是能夠有兩個公式呢:
1> num%2==0?"偶數":"奇數" ; 2> num%2==1?"奇數":"偶數" 。
想都不想,固然都行啊,隨便用。 未必哦,看代碼先:
int num = -1;
System.out.println(num%2==1?"奇數":"偶數");
打印的是: 偶數, 靠,有木有搞錯。緣由是這樣的,java中取餘算法的模擬代碼以下:
${被除數} - ${被除數}/${除數} * ${除數} ,因此咯,-1%2 結果是-1固然不等於1啦.
最好的方式是,用偶判斷吧[ num%2==0?"偶數":"奇數" ], 那樣纔是百分百正確的.