i++与++i不要傻傻分不清

虽然这俩的区别很简单,但是真的有很多开发人员在使用的时候不注意,一不小心就酿成大错

下面我会用一个深刻的例子来进行讲解 i++++i 的区别(PS:我不会告诉你这是一个有六七年开发经验的人所犯的错误的。。。)

事情的经过是这样子的

某开发人员写了这样一行代码

如果未获取到锁,调用自身的方法

 其实他想做的是,如果没有获取到锁,睡100ms之后再重试,重试三次失败

乍一看,这个方法似乎没有什么问题,但是稍微有点经验的开发人员都会发现,times++会先执行后++,那么也就是说,给 tranceEntryMessage 这个方法传递进去的值永远是0;程序就陷入了死循环

 写一个单元测试试一下

调用方很简单:

1     @Test
2     public void test2(){
3         test4(null);
4     }

其中test4方法如下

    public void test4(Integer i){

        if (null == i) {
            i = 0;
        }
        System.out.println("i = " + i);
        if (i == 3) {
            System.out.println("已经重试三次了。。。。");
            return;
        }
        test4(i++);

        System.out.println("i = " + i);

    }

我们会发现,程序永远没有办法执行到第二个

System.out.println("i = " + i);

 这行代码

看一下debug运行结果

 已经运行4次了,i 打印出来的值依然是 0;

那么要解决这个问题怎么办呢

很简单,把 times++ 换成  ++times 就可以了

程序完美执行

原文地址:https://www.cnblogs.com/zhangqian27/p/11792853.html