这是运算符执行的流程问题。
if((b1==true) && ((output+=10)==20))这个代码中有两个要注意的问题:
(1)b1==true这是一个判断语句其返回结果为一个boolean类型的数据。因为b1之前的值是false,所以这条语句返回的值是false.
(2) && 这个符号逻辑短路与,两边连接的是boolean类型的数据,只有两边的值是true整个"&&"表达式都会返回ture,只有一个为false,其结果就是会是false。它有一个特点:当&&的左边为false时,&&的右边表达式是不执行的。
第一种情况:因为b1==true返回的是false,所以整个(b1==true) && ((output+=10)==20)表达式返回的是false且"(output+=10)==20"表达式也没有得到执行,这条语句判断下的语句块就不会执行,所以结果就是: Not equal! 10。
第二种情况:b1=true这是一个赋值语句,返回的值自然就成了true;output+=10相当于是output=output+10结果是20,那么((output+=10)==20)表达式返回的是true,这样&&两边都是ture,整个(b1=true) && ((output+=10)==20)表达式返回值就是ture。结果自然就是: We are equal 20。 |