前缀++ 和 后缀 ++ 的深刻理解
2016-10-22 10:46
363 查看
以前只知道自加放在前面和放在后面的区别,是先赋值后自加和先自加后赋值的区别,却不知道,如果没有赋值
运算,变量直接参与运算的区别,总是以为如果直接参与运算的话,应该是 自加符号 放在前面和后面是没有区别的,在前几天写程序的过程中突然发现了bug ,总是找不到问题,后来一步步的查看才知道自己以前的理解是错的,特意就做了个总结提醒自己,这也是容易犯错的地方,总是想当然。
例如下面的代码输出就说明了这个问题
出结果是 :
从结果就可以看出来 如果直接使用变量的情况下,自加放在变量之前和之后是不同的,深入探索之后发现,其实java为了实现自加这种运算操作,起始在底层的封装中应该是分为了好几步的,一个 自加符号 如果放在变量之前 例如 a++ 可以分为 这样的几步 ① a = a; ② a = a + 1; 如果把自加符号放在 变量之前的话, 那么应该等价于 ① a = a + 1; ② a = a; 即一个自加符号应该是分为了这么几个原语赋值操作,其中比较重要的应该就是使用变量的时间发生在那一步而已,对比就可以发现,如果是直接使用变量的情况下, 时间分割点发生在第二步上,但是之后,第二步会在使用完该变量的时候执行,所以,如果该变量没有直接参与运算,那么结果应该是相同的。 因为在一个分号语句中,这两步之间并没有使用该变量。
运算,变量直接参与运算的区别,总是以为如果直接参与运算的话,应该是 自加符号 放在前面和后面是没有区别的,在前几天写程序的过程中突然发现了bug ,总是找不到问题,后来一步步的查看才知道自己以前的理解是错的,特意就做了个总结提醒自己,这也是容易犯错的地方,总是想当然。
例如下面的代码输出就说明了这个问题
@Test public void testAddSelf(){ int a = 3; int b = 3; System.out.println("自加符号放在后面》》"+ a++); System.out.println("自减符号放在前面》》"+ ++b); }
出结果是 :
从结果就可以看出来 如果直接使用变量的情况下,自加放在变量之前和之后是不同的,深入探索之后发现,其实java为了实现自加这种运算操作,起始在底层的封装中应该是分为了好几步的,一个 自加符号 如果放在变量之前 例如 a++ 可以分为 这样的几步 ① a = a; ② a = a + 1; 如果把自加符号放在 变量之前的话, 那么应该等价于 ① a = a + 1; ② a = a; 即一个自加符号应该是分为了这么几个原语赋值操作,其中比较重要的应该就是使用变量的时间发生在那一步而已,对比就可以发现,如果是直接使用变量的情况下, 时间分割点发生在第二步上,但是之后,第二步会在使用完该变量的时候执行,所以,如果该变量没有直接参与运算,那么结果应该是相同的。 因为在一个分号语句中,这两步之间并没有使用该变量。
相关文章推荐
- 通过配置ssh深刻理解puppet的语法及工作机制
- 深刻理解Oracle数据库的启动和关闭
- 单例的必要认识(深刻理解)
- 深刻理解Java编程的7个例子
- Android:LinearLayout布局中Layout_weight的深刻理解
- 关于WM_ERASEBKGND和WM_PAINT的深刻理解
- 深刻理解JavaScript基于原型的面向对象
- 深刻理解Java编程的7个例子
- String 与 StringBuffer 与 StringBuilder的深刻理解
- Android:Layout_weight的深刻理解
- Atitit 图像处理 深刻理解梯度原理计算.v1 qc8
- 深刻理解:C#中的委托、事件
- 深刻理解Oracle数据库的启动和关闭
- 深刻理解Linux进程间通信(IPC)
- 深刻理解Linux进程间通信(IPC)
- 深刻理解原类(metaclass)
- Android:Layout_weight的深刻理解
- 深刻理解If-else语句
- 深刻理解Linux进程间通信(IPC)
- 深刻理解Python中的元类(metaclass)