自增运算符理解

先上代码

  • 第一道题
 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调试并不能看出执行过程,心中有了疑惑时间长了会导致病急乱投医,想着要不要在看下视频,结果翻了两遍视频没有找到,最终的解决办法还是冷静下来进行分析,先是在网上看类似的题目找思路,这类问题考查的中心(优先级、自增流程)不会变的,以前只是知道自增在前在后的区别是在赋值顺序,但是真正的见到相关题的时候并没有把已学知识串联起来

posted @ 2020-08-26 11:15  小刘的早餐店  阅读(460)  评论(0编辑  收藏  举报