先看一个例子:

package com.test;

public class AutoIncrement {

public static void main(String[] args) {
  int a=7;
  System.out.println(++a);
  System.out.println(a);
  int b=7;
  System.out.println(b++);
  System.out.println(b);
}
}

结果也如预期的一样:

是不是回忆起大学老师讲的规则:自增有两种方式,分别是i++和++i;i++表示先赋值后加1;++i表示先加1再赋值;

那还有啥好讲的?(**上面的规则是片面的**)

那下来咱们看一个例子:

package com.test;

public class AutoIncrement {
public static void main(String[] args) {
int c = 0;
for(int i=0;i<10;i++){
c = c++;
}
System.out.println(c);
}
}

最后结果是多少?答案等于10?我可以肯定的告诉你错了,答案是0,这是为什么?

下面咱们讲一下Java是怎么样处理自增的:
i++ 和 ++i原理

i++ 即后加加,原理是:先自增,然后返回自增之前的值

++i 即前加加,原理是:先自增,然后返回自增后的值

重点:这是一般人所不知道的,记住:不论是前++还是后++,都有个共同点是先自增

1) ++i 原理,等价于

    i = i+1;
    return i;
2) i++ 原理,用代码分析表示如下:
    int temp = i;
    i = i + 1;
    return temp;
    这3句代表就是上面所说的那样:i++是先自增,然后返回自增之前的值;

PS:不同语言对自增的处理不太一样: 在C++中,“count=count++”与“count++”等价;在Java,PHP中处理方式如上述解析;不同语言,自己可以测试一下

PS:关于执行效率的认识:

i++:取出i,复制i,增加i,返回副本;
++i:取出i,增加i,返回i;
i++要增加一个副本,无疑是要多耗内存,当然效率要低一点,当然只是一丢丢罢了,根本不会对程序运行有明显的影响。

我看过一篇博客,作者的主旨是两者的效率一样,地址 http://www.cnblogs.com/anrainie/p/6610379.html

表示有距离感0.0,个人认为JVM也在不断优化,具体有待研究...

转载:https://www.cnblogs.com/JsonShare/p/6994776.html

最新文章

  1. Oracle交易流水号问题
  2. fscanf使用
  3. IOS Socket 05-XMPP开始&amp;安装服务器openfire&amp;安装配置客户端
  4. 【软件编程】乐易贵宾VIP教程 - JS改写+网页操作系列教程
  5. srcelement、parentElement
  6. R语言和大数据
  7. iOS绘图教程 (转,拷贝以记录)
  8. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
  9. OI队内测试——石门一
  10. DB2数据库代码页和实例代码页的区别(解决DB2乱码问题)
  11. java 回调函数解读
  12. 51nod--1072 威佐夫游戏 (博弈论)
  13. failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected 排坑指南
  14. 20175311 2018-2019-2 《Java程序设计》第四周学习总结
  15. Linux 上 nginx配置
  16. flink--DateSet开发--简单入门
  17. 【Selenium】【BugList4】执行pip报错:Fatal error in launcher: Unable to create process using &#39;&quot;&quot;D:\Program Files\Python36\python.exe&quot;&quot; &quot;D:\Program Files\Python36\Scripts\pip.exe&quot; &#39;
  18. 系统进不去怎么办?教你利用bootice工具引导修复系统
  19. nginx 启动 + uwsgi + django
  20. Oracle安装部署之RedHat安装Oracle11g_R2

热门文章

  1. Sql 语句中 IN 和 EXISTS 的区别及应用
  2. Part 23 to 26 Routing in Angular
  3. requests_cookie登陆古诗文网。session的使用
  4. 如何将rabbitmq集群中的某个节点移除.
  5. 接口返回图片,前端生成临时url实现展示、下载效果
  6. [bzoj1044]木棍分割
  7. 多线程06.thread守护线程
  8. 低代码开发Paas平台时代来了
  9. 《重学Java高并发》Sempahore的使用场景与常见误区
  10. 『学了就忘』Linux权限管理 — 53、ACL权限详解