1. 程式人生 > 實用技巧 >自增運算子理解

自增運算子理解

先上程式碼

  • 第一道題
 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除錯並不能看出執行過程,心中有了疑惑時間長了會導致病急亂投醫,想著要不要在看下視訊,結果翻了兩遍視訊沒有找到,最終的解決辦法還是冷靜下來進行分析,先是在網上看類似的題目找思路,這類問題考查的中心(優先順序、自增流程)不會變的,以前只是知道自增在前在後的區別是在賦值順序,但是真正的見到相關題的時候並沒有把已學知識串聯起來