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
相关产品推荐
相关产品推荐

