害死人的自动递增,不偿命的自动递减

本文通过一个真实的编程案例,深入解析了Java中前缀递增和后缀递增的区别,以及它们在递归调用中可能导致的死循环问题,并提供了正确的代码实现。

记得参加工作的第二年,我的同事小二就因为把“前缀递增”写成了“后缀递增”被一顿痛骂之后拉出去祭天了。至今我还耿耿于怀,因为我也是参与者之一(当时小王准备使用p = p + 1,但我劝小王使用p++,因为自动递增更加简洁);但小二很讲义气,没有把我捅出去,我才苟且活到今日。往事不堪回首,但为了以后的Java程序员着想,我决定忍着记忆的苦涩把小二当年的那段代码记录下来:

public static void main(String[] args) {
	int p = 0;
	calculate(p);
}

public static void calculate(int p) {
	if (p < 3) {
		// 其他
		calculate(p++);
	}
}

按照以上的代码来看,这是一个死循环,calculate迭代是不会跳出的,直到程序报错。为什么会这样呢?

因为后缀递增会先生成值,再执行运算;也就是p++这个表达式的结果还是p。但前缀递增会先执行运算,再生成值;也就是++p这个表达式的结果是p+1。

那以上代码正确的写法是什么呢?答案如下:

public static void main(String[] args) {
	int p = 0;
	calculate(p);
}

public static void calculate(int p) {
	if (p < 3) {
		// 其他
		calculate(++p);
	}
}

上一篇:Java 的操作符——“=”号

下一篇:Java 流程控制语句

如果你觉得文章对你有所帮助,也蛮有趣的,就微信搜索“沉默王二”关注一下我的公众号。嘘,回复关键字「Java」更有好礼相送哦。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默王二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值