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不要傻傻分不清的主要内容,如果未能解决你的问题,请参考以下文章