java自减增自减运算

问:下面程序的运行结果是什么

首先 count++ 是一个有返回值的表达式,返回值是 count 自加前的值Java 对自加处理的流程是先把 count 的值(不是引用)拷贝到一个临时变量区,然后对 count 变量加1接着返回临时变量区的值。

所以上面代码块中第一次循环的执行步骤是 JVM 把 count 值(0)拷贝到临时变量区然后 count 值加 1,这时 count 的值是 1接着返囙临时变量区的值(值是 0),最后返回值赋值给 count此时 count 值被重置成 0;所以上面代码语句 count = count++; 可以按照如下代码来理解:

所以第一次循环后 count 的值還是 0,其他 99 次的循环也是一样的最终导致 count 的值始终没有改变,仍然保持着最初的状态;如果想要打印结果为 100 则需要修改 count = count++; 语句为 count++; 即可因此对于 ++/-- 运算在 java 中一定要警惕这个陷阱(--

问:Java 或者 Android 开发中可以通过哪些方式来保证并发安全的自增自减操作?

答:java 默认的自增自减运算符是非并发安全的要想实现并发安全的自增自减操作可以通过如下几种方式实现。

通过 synchronized 代码块或者方法来保证自增自减并发安全

通过主动使用 Lock 锁来保证自增自减并发安全。

上面几种做法中最推荐直接使用 AtomicInteger 的方式因为其相对于其他几种方式封装性非常便捷,此外其实现基于 volatile 對象的 CAS 操作来保证并发安全算是一种相对高效的方式。

我要回帖

更多关于 java自增自减 的文章

 

随机推荐