原文:https://blog.csdn.net/c15158032319/article/details/78209740

记得刚开始学编程的时候还是从c语言开始的,还是看的谭浩强写的那本书,上面对介绍i++和++i的区别如下:
i++是先赋值,然后再自增;++i是先自增,后赋值。
用代码表示就是:
若 a = i++; 则等价于 a=i;i=i+1;
而 a = ++i; 则等价于 i=i+1;a=i;

那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码:

@Test
public void test(){
int i = 0;
i=i++;
System.out.println(i);
}

如果按原先定义,就应该是i=i;i=i+1; 那么结果就应该是1;但是很遗憾结果是0;所以得知原先定义有误,至少是不准确的。

  • 那么真实的机制是怎么样的呢?我简单用代码模拟如下真实流程:
int i;

   @Test
public void testAddI() {
i = 0;
i = lastAdd();
System.out.println(i);
i = 0;
i = firstAdd();
System.out.println(i);
} //模拟i++的机制
public int lastAdd() {
//操作i前对其值保留副本
int temp = i;
i = i + 1;
//返回副本
return temp;
} //模拟++i的机制
public int firstAdd() {
i = i + 1;
return i;
}

输出结果为0和1,和i=i++以及i=++i的结果一致。

  • 结论:在java的执行过程中,i++和++i都直接对i进行了i=i+1的操作,但是不同的是i++得到的是i未进行加法操作的前的值的副本,而++i直接得到计算后的值。

最新文章

  1. 开始学nodejs —— 调试篇
  2. placeholder js简单实现
  3. Ubuntu修改mysql默认编码的方法
  4. javascript模块简单写法
  5. ThinkPHP3.2.3扩展之生成PDF文件(MPDF)
  6. 类似qq的浮动窗口 ,随着滚轴的滚动,始终处于屏幕的中间(能看到运动的过程)
  7. script标签块的独立性与共享性
  8. TC SRM 664 div2 B BearPlaysDiv2 bfs
  9. oracle查询最占用资源的查询
  10. 智能卡 ATR解析
  11. Nim Game 解答
  12. 使用git微命令深入理解git工作机制
  13. bonding实现网卡负载均衡与高可用
  14. 杂记-python
  15. php过滤 字符
  16. Session&&cookie
  17. Bukkit插件编程中.yml配置文件的创建和读取
  18. odoo之ERP系统
  19. Java -- 异常的捕获及处理 -- throws与throw关键字
  20. 本地环境 XAMPP+phpStorm+XDebug+chrome配置和断点调试 注册方法

热门文章

  1. 【计算机视觉】OpenCV篇(10) - 模式识别中的模板匹配
  2. 基于Spring Boot架构的前后端完全分离项目API路径问题
  3. 【ML基础】皮尔森相关系数(Pearson correlation coefficient)
  4. 快速修改Windows系统密码命令
  5. 转载: 我如何使用 Django + Vue.js 快速构建项目
  6. php7.4 更新特性
  7. 多分类评测标准(micro 和 macro)
  8. redis相关文章
  9. Selenium+java - 操作滚动条
  10. LinkedHashSet有没有重复的元素