首先,因为java里面 有 或 | 和 短路或 ||
你现在用的就是短路或 ||
你想明白这个题目就要先明白 | 和 || 的区别。
如: A | B ,若A符合了是true,但程序还是要运行B的。。
但A || B的话,若A是true,符合了,程序就不再运行B了!
所以你上面w=++a>1||++b<++c; 这一句 ,先运行了 ++a,得到a = 2,然后a> 1符合了题目,所以w为 true 了,|| 后面的就不再运算了,所以b和c都保持为 1
若帮到你望采纳。
首先要明白++a与a++的区别.++a是先运算后取值,a++是先取值后运算.你的式子中w=++a>1||++b<++c,首先第一个是++a>1,此时先运算++后取值.a的值变为2也就是2>1是成立的.而||是逻辑短路运算符或,前面的式子成立了后面就不看了,所以b跟c没有得到运算.
你所问的另外一个那如果换成w=a++>1||++b>c++;结果就是2,2,2,true.这是为什么?
这是因为a++是先取a的值1然后再运算++也就是1>1肯定是不成立的.所以此时要运算后面的++b>c++.当然此时a,b,c都得到++运算了,所以全都变为2
首先:a=1,b=1,c=1;
然后(考察运算符优先级):w=++a>1||++b<++c;
执行顺序是:
1.) ++a>1 ,(a =2)
2.) 2>1为true,
对于||或运算符,前面表达式结果为true,后边表达式就不计算了,直接返回结果w=true;
所以最终结果:
a=2,b=1,c=1,w=true
abc初始都是1 但是 w=++a>1||++b<++c 时候步骤是:
1.a自加1 成为2
2.a和1比较,比a大
3.由于是||(或者符号),所以已经得到true以后 就直接将true赋值给w,++b > ++c 就不执行了
建议将|| 符号的前后表达式交换位置进行试验
不懂的话再问
a=b=c=1 这句将a,b,c的值全部变成了1
++a,将a的值变成了2,++a>1即2>1,这明显是true,而true ||(或)任何东西都是true,所以为w是true。
因此打印结果为:2,1,1,true
因为a=1,自加后a=2.
a>1是true,所以w就是true,||后边不运行,b和c还是1