求解答为什么等于46

**


- 
1. 


```****
  1. img

```**

z初始值为42,
第一个if语句中,z++==42是先判断z是否为42,然后z再加1。由于z初始为42,所以第一个if语句条件成立,再次z++使得z=44
第二个if语句,++z==45是z先加1再判断是否为45,由于之前z=44,所以++z后z等于45成立,那么又会执行z++一次,所以最后z值为46

因为z做了4次++
每一步都走了。

img


z==42? z++ z=43
&& y=true
肯定走括号 z++ z=44
x=false 这里没有对 要走或
|| ++z ==45 先++ z=45 45==45
true了
走括号 z++
z= 46

判断语句中y=true和x=false都是赋值语句,运行结果都是true,所以所有的加运算都执行了

img

z=42 经过蓝框部分,z++两次 都是在if语句结束后进行的 所以蓝框部分结束 z+1+1=44
经过红框部分 if条件时++z ++z是先自增z再执行语句 所以 z变成了45 与45相等,符合判断条件,z++后if语句结束,然后z自增为46,然后输出 z = 46 所以选D

z++ 先执行相关语句,z再自增
++z z先自增,再执行相关语句

望采纳!!

  1. 先了解一下 z++和++z的区别,z++是后运算,++z是先运算。

从底层来分析一下这个题:
原本 z=42 ,在jvm空间中存放的值为42
当走到第一个if时:
(z++ == 42) : 此时zjvm中的值为42,从jvm中取出z与42进行比较,则42==42,为true;然后再进行 ++运算,此时z在jvm中存放为43
当条件为true后继续走到 (y=true) 。注意 此处是赋值,不是判断是否相等,y=true,则y为true。
到此,执行if后面的 z++,此时在jvm中z变成44。

到第二个if:
同理 (x=false) 是赋值,此时x为false,
if 可以看成 if(false || (++z=45))
此时(++z == 45) : z先运算,44+1 后z变成45,此时 if 可以看成if(false || 45==45) ,即 if(false || true) ,此时则走z++;即45+1 = 46;
输出=时从jvm中取出的值为46

z++是先取z的值,z再加1,所以z++==42结果为true,且z=z+1=43
=是赋值,所以y=true结果为true
那么第一个if(true&&true)结果为true z++=44
++z是z先加1再取z的值,所以++z==45结果为true,z=45
第二个if(false||true)结果为true z++=46
最终z就等于46