前缀++ 和 后缀 ++ 的深刻理解

来源:互联网 发布:matlab 中文论坛 知乎 编辑:程序博客网 时间:2024/06/06 00:43

以前只知道自加放在前面和放在后面的区别,是先赋值后自加和先自加后赋值的区别,却不知道,如果没有赋值
运算,变量直接参与运算的区别,总是以为如果直接参与运算的话,应该是 自加符号 放在前面和后面是没有区别的,在前几天写程序的过程中突然发现了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; 即一个自加符号应该是分为了这么几个原语赋值操作,其中比较重要的应该就是使用变量的时间发生在那一步而已,对比就可以发现,如果是直接使用变量的情况下, 时间分割点发生在第二步上,但是之后,第二步会在使用完该变量的时候执行,所以,如果该变量没有直接参与运算,那么结果应该是相同的。 因为在一个分号语句中,这两步之间并没有使用该变量。

0 0