**
-
1.
```****
```**
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次++
每一步都走了。
判断语句中y=true和x=false都是赋值语句,运行结果都是true,所以所有的加运算都执行了
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先自增,再执行相关语句
望采纳!!
从底层来分析一下这个题:
原本 z=42 ,在jvm空间中存放的值为42
当走到第一个if时:
(z++ == 42) : 此时z在jvm中的值为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