You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java代码输出结果为30而非31?自增运算符优先级疑问

为什么这段Java代码输出30而不是预期的31?

嘿,这个问题的根源在于Java编译器的最长匹配规则(也叫“贪婪解析”),咱们一步步拆解来看:

问题代码解析

先看你这段代码里的关键行:

System.out.println(myFirstNumber+++mySecondNumber);

你可能以为+++会被解析成+ ++(也就是把mySecondNumber做前自增),但Java编译器会尽可能把连续字符组合成最长的合法语法单元(token)。所以这里的+++会被拆成:

  • ++:属于myFirstNumber的后自增运算符(myFirstNumber++)
  • +:加法运算符

这行代码实际等价于:

System.out.println( (myFirstNumber++) + mySecondNumber );

计算过程

  • myFirstNumber++是后自增:先返回当前值20,之后才把myFirstNumber的值改成21
  • 加上mySecondNumber的初始值10,总和就是20 + 10 = 30
  • 这就是为什么输出是30,而不是你预期的31

如何得到预期的31?

如果想让mySecondNumber做前自增,需要明确拆分运算符,比如加括号或者调整写法(可读性更高):

// 写法1:用括号明确优先级
System.out.println( myFirstNumber + (++mySecondNumber) );
// 写法2:拆分代码,更清晰
int sum = myFirstNumber + ++mySecondNumber;
System.out.println(sum);

这样++mySecondNumber会先把mySecondNumber的值改成11,再返回11,加上myFirstNumber的20,总和就是31了。

内容的提问来源于stack exchange,提问作者Chronic Procrastinator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:21:27