自增运算符理解

先上代码

  • 第一道题
 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 @   小刘的早餐店  阅读(472)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示
主题色彩