++/-- 是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数

前缀自增(++a):先进行自增运算,再进行表达式运算;

后缀自增(a++):先进行表达式运算,再进行自增运算。

        int x = 5, y=5;
int a = 2*++x;
int b = 2*y++;
System.out.println(a+"=="+b);

输出结果:a = 12, b =10;

前缀++,先自增运算,=》 a=2*6

后缀++,先表达式运算,=》b=10;

  

     public void prefixAdd(){
int i = 100;
i = ++i;
System.out.println(i);
} public void postfixAdd(){
int i = 100;
i = i++;
System.out.println(i);
} public void varAdd(){
int i = 100;
int y = i++;
System.out.println(i+"=="+y);
}

这里比较让人困扰的是第二与第三个方法的区别。这需要从编译的字节码到底层数据分布来查看。

iload_1 :从栈帧的局部变量读取,1表示索引

istore_1:存储到局部变量,1表示索引

iinc:局部变量增加一个常量值

前缀++与后缀++的区别:

当进行到第7行时,istore_1存储的值还是100, 并且覆盖掉已经增加到101的局部变量1。  因此当11行,再次iload_1还是100。

前缀++ 第3行进行了局部变量增加,第6行读取时已经是101,第7行再次存储到局部变量1也是101,因此第11读取时也是101。

后缀++: 先读取局部变量,再进行局部变量增加

前缀++:先局部变量增加,再读取。

第三个方法,使用一个变量把第一次iload_1的值(i=100)存储到istore_2中局部变量中,所以局部变量1的值是101,并没有被覆盖。

因此输出结果:

101
100
101==100

i = i++;   --->  int y = i++;这样转变下,就能更好地理解,i = i++; 为什么i=100。

最新文章

  1. 从网上找的 visual studio 的各个版本下载地址,vs2010/vs2012/vs2013带注册码
  2. jsp和servlet中文乱码
  3. Scala学习笔记之伴生对象
  4. [Android] 关于getinstalledpackages参数的分析
  5. jQuery之元素操作及事件绑定
  6. apache 根据端口访问配置
  7. 【linux】who&&w
  8. lower_bound 和 upper_bound
  9. Styles and Themes
  10. 关于SWT的线程问题
  11. development period
  12. map的类型映射
  13. C# Excel或表格插件
  14. 基于visual Studio2013解决C语言竞赛题之1058打印数字
  15. C#学习笔记-迭代器模式
  16. python-常见数据类型及其方法
  17. Java Concurrency in Practice——读书笔记
  18. gradle的安装配置成功标志
  19. C语言学习及应用笔记之二:C语言static关键字及其使用
  20. linux创建定时任务,定时执行sql

热门文章

  1. 使用Win10自带的虚拟机安装Linux
  2. 自动化移动安全渗透测试框架:Mobile Security Framework
  3. Mac系列萎靡 大棒能否敲醒苹果?
  4. Runtime常见使用
  5. Golang/Python/PHP带你彻底学会gRPC
  6. git上传命令步骤
  7. vue 实现 裁切图片 同时有放大、缩小、旋转功能
  8. Windows下利用virtualenvwrapper指定python版本创建虚拟环境
  9. 总结:利用asp.net core日志进行生产环境下的错误排查(asp.net core version 2.2,用IIS做服务器)
  10. VUE四 axios详解