Java中if条件布尔表达式里==与=运算符同时使用的工作原理是什么?
示例代码
import java.util.*; class Example{ public static void main(String args[]){ int x =10; boolean b = true; if((b=false)==false){ System.out.println(b); } } }
表达式执行机制
- 首先Java运算符优先级规则中括号优先级最高,所以
(b=false)==false会优先执行括号内的赋值操作:
Java里赋值表达式本身有返回值,返回值就是赋值后左侧变量的最终值。因此执行b=false时,会同步完成两个操作:一是把变量b的取值修改为false,二是这个赋值表达式整体返回false。 - 括号内的赋值操作执行完成后,才会执行
==相等性比较:将括号内表达式返回的false和右侧的false做相等判断,得到的比较结果为true,因此if条件成立,进入代码块执行打印逻辑。 - 由于进入if代码块前,变量
b已经被赋值为false,因此最终打印结果为false。
常见误区说明
很多开发者容易把该表达式和
b == false混淆,或者误以为赋值操作会晚于比较执行。如果去掉括号写为if(b=false==false),运行结果会完全不同:此时==优先级高于=,会先计算false==false得到true,再把true赋值给b,最终if条件依然成立,但打印的b值会变成true。
内容的提问来源于stack exchange,提问作者SKDAlwis
相关产品推荐
相关产品推荐

