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

下述Java代码中哪些行会报错?第2、4行报错原因解析

Java代码中第2、4行编译报错的原因解析

先看完整代码:

public static void main (String[] args) {
    int a=10,b=20;
    System.out.println(a+++--b);//line 1
    System.out.println(a--+++b);//line 2
    System.out.println(a++-++b);//line 3
    System.out.println(a+++++b);//line 4
}

Java的词法分析器遵循最长匹配原则——从左到右扫描代码时,会尽可能组合出最长的合法语法单元(token)。这是导致第2、4行报错的核心原因,下面逐行解析:

Line 1:a+++--b

被解析为 (a++) + (--b),完全合法:

  • a++ 是后置自增,先返回当前值再让a自增
  • --b 是前置自减,先让b自减再返回新值
    两者做加法运算,编译运行都正常。

Line 2:a--+++b

按照最长匹配规则,会被拆解为 (a--) ++ + b:

  • a-- 是后置自减,返回的是a自减前的数值结果(不是变量本身)
  • 而++自增操作符要求操作数必须是可修改的变量(左值),不能作用于数值字面量或表达式的结果
    这就导致(a--)++违反语法规则,编译器直接报错。

Line 3:a++-++b

被解析为 (a++) - (++b),合法:

  • a++ 返回当前值后自增,++b 自增后返回新值
    两者做减法运算,语法上完全合规。

Line 4:a+++++b

同样遵循最长匹配规则,被拆解为 (a++) ++ + b:

  • a++ 返回的是数值结果,无法作为++操作的目标(因为++需要操作变量)
    因此和Line2一样,触发编译报错。

内容的提问来源于stack exchange,提问作者Jayveer Mall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:53:14