自增運算子理解
阿新 • • 發佈:2020-08-26
先上程式碼
- 第一道題
int i = 2; int j = 3; j *= ++i;//自加在前,然後執行*=,進行*=時i已經進行過自加,所以程式碼可以理解為 j*=3 System.out.println (i);//3 System.out.println (j);//3*3=9 //解析:這個考查的是運算子優先順序和對自增運算子的理解,要明白的是自增運算的優先順序是大於'='和'*='的 //第一道題拓展 int i = 2; int j = 3; j *= i++;//自加在後,先把i的值取出來進行*=,然後再自加,*=給j的時候還沒有進行自加,所有程式碼可以理解為 j*=2 System.out.println (i);//3 System.out.println (j);//3*2=6
- 有了第一道題的預熱,看下第二道題,這個也是思考了很久的題
int i = 10;
i += (i++) + (++i);
System.out.println (i);//32
第二題理解過程:剛看到這個題目的時候感覺有點懵,入門語言是PHP,只是瞭解了自增的簡單用法,沒有做過相關類似的題目,現在學尚矽谷視訊學java在PPT中看到了這道題目,表面上看起來有兩個自增,結果應該是33才對,仔細看下這道題暗藏殺機,這裡的括號不加也可以,我感覺加了之後對我起到了迷惑作用,運算的時候會不自覺的先自運算前面的括號中的,然後再運算後面括號中的,笑哭表情。。。
i++ 在執行的時候是先把i賦值給後面,賦值給後面的i是10,賦值完後i++變成了11,++i接受到的i是10,進行++操作後也變成了11,所以答案是32
感悟
對於第二道題在理解上有很大的疑惑,用debug除錯並不能看出執行過程,心中有了疑惑時間長了會導致病急亂投醫,想著要不要在看下視訊,結果翻了兩遍視訊沒有找到,最終的解決辦法還是冷靜下來進行分析,先是在網上看類似的題目找思路,這類問題考查的中心(優先順序、自增流程)不會變的,以前只是知道自增在前在後的區別是在賦值順序,但是真正的見到相關題的時候並沒有把已學知識串聯起來