码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-04 17:50:44      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:注意   png   获取   调用   错误   单元   就是   test   ret   

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

 

下面我会用一个深刻的例子来进行讲解 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 就可以了

技术图片

 

 

 

程序完美执行

 

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

标签:注意   png   获取   调用   错误   单元   就是   test   ret   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!