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

Posted zhangqian27

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 就可以了

技术图片

 

 

 

程序完美执行

 

以上是关于i++与++i不要傻傻分不清的主要内容,如果未能解决你的问题,请参考以下文章

傻傻分不清吗?——Trie Tree,字典树、前缀树概述

GIT与HIT不要傻傻分不清,带你掌握两者之间的区别

BIONIOAIO,还傻傻分不清?

ERP系统和MES系统,不要傻傻分不清

Java SPI 和 API,傻傻分不清?

URI、URL傻傻分不清