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