黑马程序员技术交流社区

标题: 这两个的输出结果不一样?y的结果应该都是一样啊?谁能解释一下 [打印本页]

作者: 梁秋瑜    时间: 2013-5-25 19:14
标题: 这两个的输出结果不一样?y的结果应该都是一样啊?谁能解释一下
int x = 1,y = 1;

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


int x = 1,y = 1;

if(x++==2 && ++y==2){
        x =7;
}
System.out.println("x="+x+",y="+y);
作者: SOAR    时间: 2013-5-25 19:21
x++是先使用x然后在自加,++y是先自加然后在使用
第一个if语句块用了&,无论&左边的结果是什么右边的都会继续计算
第二个if语句块使用了&&,如果左边是true则继续计算右边的,如果左边的是false则右边的在不参与计算。
作者: 神之梦    时间: 2013-5-25 19:22
&&与&两运算的区别:
&&如果左边为假,右边就不进行判断。
&不管左边是否为假,右边都进行判断。
楼主知道这点应该就知道结果不同的原因了、
作者: 张旺达    时间: 2013-5-25 19:26
你这个是一个程序还是两个程序啊?如果是一个的话,下面就不用再定义int x = 1,y=1了...  

如果是一个程序的话,当输出第一个x和y的时候,它们的值就已经是变化后的值了,
所以第一个输出之后x,y的值分别等于2,下面的x和y初始值就是2了吧,所以下面x和y都是3...

个人见解。。{:soso_e197:}
作者: clp    时间: 2013-5-25 21:34
注意区别单与(&)和双与(&&)

捕获.JPG (52.12 KB, 下载次数: 0)

捕获.JPG

作者: First    时间: 2013-5-25 22:26
第一个流程:
1. x==2  返回 false
2. x=x+1   得到 x = 2;
3  y=y+1   得到 y = 2;
4  y==2  返回 true
5. if(false&true)  得到 false
6. 打印 x=2,y=2;


第二个流程:
1. x==2  返回 false
2. x=x+1   得到 x = 2;
3. if(false&&这里不好执行) 得到false;
6. 打印 x=2,y=1;
作者: FantasticPie    时间: 2013-5-25 23:01
这个问题考了两个方面的知识:一、x++ 与 ++x的区别; 二、按位与“&”和逻辑与“&&”的区别;楼上的已经回答得的很完善了
作者: 王靖远    时间: 2013-5-25 23:38
建议把第二天和第三天的学扎实,需要记忆的细节和容易混乱的东西很多。打好基础后面才能学的轻松。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2