当前位置:编程学习 > JAVA >>

刚入java,有道题,请问大侠

int x = 1,y = 1;
if(x++ == 2 & ++y == 2){
    x = 7;
}
System.out.println("x=" + x + ",y=" + y);
为什么x = 2,y = 2 ?
大侠们可以给我说下分析过程吗? --------------------编程问答-------------------- x++
++y
都执行 --------------------编程问答-------------------- if(x++ == 2 & ++y == 2){
    x = 7;
}
1、x先判断,后++,但所以x++ == 2为false,但是&不短路,所以要计算++y,这个是先自增,所以y=2,++y==2为true,但是x++==2 为false,所以整个表达式为false,所以也就不会执行到x=7这部啦
所以最后输出的就是x = 2,y = 2
不知道表达明白没
最近表达能力有点下降
--------------------编程问答-------------------- 谢谢,但是我的分析是x++不是x先参与运算后x再自增为1吗?x最后应该是2呀,++y,是y先自增1然后再参与运算,y也应该是等于2呀?不知道我哪部分析错了
--------------------编程问答--------------------
引用 3 楼 t11590692 的回复:
谢谢,但是我的分析是x++不是x先参与运算后x再自增为1吗?x最后应该是2呀,++y,是y先自增1然后再参与运算,y也应该是等于2呀?不知道我哪部分析错了

你说的没错啊,你看下这句话if(x++ == 2 & ++y == 2)
x++是x先参与运算后x再自增为1,先参加运算x=1,此时x==2是false,但是&不短路,所以要计算++y,这个是先自增,所以y=2,++y==2为true。整个if的结果是false。最终输出x = 2,y = 2
--------------------编程问答-------------------- 当使用&&作逻辑与的时候,先计算第一个表达式,如果第一个表达式为真,继续计算第二个表达式,如果第一个表达式假,则不计算第二个表达式。
当使用&作逻辑与的时候,就是LZ这种情况,不管第一个表达式的计算结果是真是假,第二个表达式都会计算。

x++ == 2 先==,再++; ++y == 2 先++,再== --------------------编程问答-------------------- int x=1;
x=x++;
搞懂这个一切都不是问题了
x会不变,你懂的哟 --------------------编程问答-------------------- &是逻辑与 操作符号,没有短路原则的。
&&是条件与判断,有短路原则。 --------------------编程问答--------------------
引用 2 楼 longtian1213 的回复:
if(x++ == 2 & ++y == 2){
    x = 7;
}
1、x先判断,后++,但所以x++ == 2为false,但是&不短路,所以要计算++y,这个是先自增,所以y=2,++y==2为true,但是x++==2 为false,所以整个表达式为false,所以也就不会执行到x=7这部啦
所以最后输出的就是x = 2,y = 2
不知道表达明白没
最近表达能力有点下降

2楼正解 --------------------编程问答-------------------- 1、&与&&不一样
2、第一个是假,第二个是真,所以整体为假,赋值为7不执行 --------------------编程问答-------------------- 初学者总会被坑过,x++还是++x,x都会加1,只是顺序的问题。 --------------------编程问答--------------------

int x = 1,y = 1;
x=x+1;
if(x == 2 & y == 2){
     x = 7;
}
y=y+1
System.out.println("x=" + x + ",y=" + y);

我想问一下lz这段程序的输出是多少? --------------------编程问答--------------------
引用 7 楼 oh_Maxy 的回复:
&是逻辑与 操作符号,没有短路原则的。
&&是条件与判断,有短路原则。
正解
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,