zoukankan      html  css  js  c++  java
  • 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 就可以了

    程序完美执行

  • 相关阅读:
    ring0 ShadowSSDTHook
    ring0 恢复SSDTHook
    Go的CSP并发模型
    [转]An overview of Openvswitch implementation
    堆排序
    集群 分布式
    云介绍
    云分层
    happens-before
    Java异常
  • 原文地址:https://www.cnblogs.com/zhangqian27/p/11792853.html
Copyright © 2011-2022 走看看