java自增策略小陷阱
来源:互联网 发布:jing 软件 编辑:程序博客网 时间:2024/05/03 15:38
首先,来一段小程序,我们先猜猜运行结果是怎样?
/** * Created by Song on 2016/8/29. * 自增长测试 */public class Main { public static void main (String [] args){ int num = 0; for (int i =0; i<10;i++){ num = num++; System.out.println("num "+i+" :"+num); } System.out.println("最后值:"+num); }}
我觉得,很大一部分的结果可能是,最终结果num=10. 因为我们一直被教导num++是指先运算后执行自增操作。然而结果是这样吗?真实结果事实上是 num=0!!
这就涉及到不同语言对自增操作的具体实现方式了,在JVM下,num++的实现方式是这样的,首先将num的值复制到临时变量区,然后对原num值做加操作,最后返回临时变量区的num值。我们可以将num++看成是一个函数(方法)体,其执行过程等同于以下代码逻辑:
int autoIncrement(int num){ int temp = num; num = num+1; return temp; }
现在可以理解了吧,对于语句 num = num++; 其右边部分可以看成一个上面的函数体,尽管在执行过程中num值确实发生了改变,但右边整体的返回值仍为执行加操作之前的值,所以不管循环多少次,num都是初始值0!!
如果吧num=num++;改成num=++num又是什么情况呢?有了这一次的经验,我们应该能推算到++num 的实现过程是这样的:
int autoIncrement(int num){ num = num+1; return num; }
所以答案是10!!
0 0
- java自增策略小陷阱
- Java 自增陷阱
- JAVA自增陷阱
- Java的自增陷阱
- java警惕自增的陷阱
- Java学习笔记----自增陷阱
- Java 自增自减运算符陷阱
- Java标识符小陷阱
- 【Java】 Integer 包装器的比较小陷阱(一种优化策略惹得祸)
- Java自引用以及陷阱
- Java的一个小陷阱
- 警惕自增的陷阱
- 警惕自增的陷阱
- 变量自增的陷阱
- Java字符串split方法的小陷阱
- java编程之 - 内部类小陷阱
- ArrayList是自增策略
- hibernate 主键自增策略
- boost::condition_variable、boost::time_wait使用方法
- 关于索引的B tree B-tree B+tree B*tree 详解结构图
- SPI、IIC、UART区别
- 高性能流媒体服务器-nebula之数据结构(6)--无节点内存分配的单、双链表
- 哎,学一半发现难以绕过著名数据分析模块
- java自增策略小陷阱
- 详解自主实现RecyclerView下拉刷新、上拉加载、Header、Footer以及swiperefreshlayout的部分讲解
- MD5加密函数签名校验+时间戳时间间隔校验
- *** No rule to make target
- ListView使用小技巧
- webservice传值list<map>
- Python基础03 序列
- Android 开发规范
- GPUImage使用几点总结