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

Java中为何允许在算术表达式内使用赋值运算符?

为什么Java中b-(b=a)是合法代码?

你之所以会觉得这段代码有语法问题,核心差异在于Java里的赋值操作是表达式,而Python中赋值是语句——这是两种语言语法规则的关键区别。

1. Java赋值表达式的特性

在Java中,变量 = 表达式不仅是一个可执行的语句,它本身还是一个有返回值的表达式:赋值表达式的结果就是被赋给变量的值。

比如(b=a)这个写法:

  • 首先执行赋值操作:把a的当前值赋给b;
  • 同时这个表达式会返回刚刚赋的值(也就是a的原始值);
  • 因为它是合法的表达式,所以可以作为减法运算的右操作数,放在b-后面。

2. 代码的计算逻辑(以实际例子说明)

假设调用display(3,5),执行a = a+b-(b=a)的步骤如下:

  • 先计算左操作数a+b:此时a=3、b=5,结果为8;
  • 再计算右操作数(b=a):将a的当前值3赋给b(此时b变为3),表达式返回3;
  • 执行减法:8-3=5,把结果赋给a;
  • 最终输出a=5,b=3(本质是用无临时变量的方式交换了两个整数的值)。

3. 和Python/JS的对比

  • Python:赋值是语句,不能嵌套在其他表达式中,所以a = a+b-(b=a)会直接报语法错误,这也是你一开始产生误解的原因;
  • JavaScript:和Java类似,赋值是表达式,所以同样的写法在JS中是合法的,执行逻辑也一致。

注意

这种写法属于“技巧性代码”,可读性极差,实际开发中强烈建议使用临时变量交换值,或者直接用int temp = a; a = b; b = temp;这种清晰的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:00:53