黑马程序员技术交流社区

标题: 纠结的简单的问题,你们上来看看这二个有什么区别! [打印本页]

作者: 飞舞❤心动    时间: 2012-5-11 09:51
标题: 纠结的简单的问题,你们上来看看这二个有什么区别!
1.以下代码运行后得到的输出结果:   Not equal! 10  

int output=10;

boolean b1 = false;

if((b1==true) && ((output+=10)==20)){

System.out.println(“We are equal ”+output);

}

else{

System.out.println(“Not equal! ”+output);

}
2.以下代码运行后的输出结果:  We are equal 20

int output=10;

boolean b1 = false;

if((b1=true) && ((output+=10)==20)){

System.out.println(“We are equal ”+output);

}

else{

System.out.println(“Not equal! ”+output);

}

那位牛人解释一下!

作者: 魏涞    时间: 2012-5-11 10:00
int output=10;

boolean b1 = false;

if((b1==true) && ((output+=10)==20)){ //这里的b1==true是一个逻辑运算是否相等比较,这里返回的是一个false,if条件判断为false

System.out.println(“We are equal ”+output);

}

else{

System.out.println(“Not equal! ”+output);

}
2.以下代码运行后的输出结果:  We are equal 20

int output=10;

boolean b1 = false;

if((b1=true) && ((output+=10)==20)){ //这里的b1=true是一个赋值运算,if条件判断为true

System.out.println(“We are equal ”+output);

}

else{

System.out.println(“Not equal! ”+output);

}


作者: 李啸    时间: 2012-5-11 10:04
int output=10;

boolean b1 = false;

if((b1==true) && ((output+=10)==20)){//&& 短路或  b1==true条件不成立 不进入if中判断条件会执行到所以会执行到else中代码

System.out.println(“We are equal ”+output);

}

else{

System.out.println(“Not equal! ”+output);

}
2.以下代码运行后的输出结果:  We are equal 20

int output=10;

boolean b1 = false;

if((b1=true) && ((output+=10)==20)){//你b1直接等于true后边条件不做判断直接进入if语句

System.out.println(“We are equal ”+output);

}

else{

System.out.println(“Not equal! ”+output);

}
作者: 程旦    时间: 2012-5-11 10:05
楼上正解
作者: 谭景宾    时间: 2012-5-11 10:07
==与=的问题:
if((b1==true) && ((output+=10)==20))  //,这里的b1==true只要不满足就不再判断(output+=10)==20),所以为Not equal! 10  
if((b1=true) && ((output+=10)==20))  //这的b1=true只要不满足,依然会去判断(output+=10)==20,这时第一个条件为假,第二个条件为真所以为We are equal 20
简单的说如果有多个条件:=就是,第一个条件为false还是true,都会去判断下一个条件。
==就是,第一个条件只要为true,就停止判断。
作者: 谭景宾    时间: 2012-5-11 10:09
应该是:==就是,第一个条件只要为false,就停止判断。
作者: 小小企鹅    时间: 2012-5-11 10:42
if(b1=true) 是将b1赋值为true,返回1;if(b1==true) 返回0.
作者: 杨鹏    时间: 2012-5-11 11:18
这是运算符执行的流程问题。
if((b1==true) && ((output+=10)==20))这个代码中有两个要注意的问题:
(1)b1==true这是一个判断语句其返回结果为一个boolean类型的数据。因为b1之前的值是false,所以这条语句返回的值是false.
(2) && 这个符号逻辑短路与,两边连接的是boolean类型的数据,只有两边的值是true整个"&&"表达式都会返回ture,只有一个为false,其结果就是会是false。它有一个特点:当&&的左边为false时,&&的右边表达式是不执行的。
第一种情况:因为b1==true返回的是false,所以整个(b1==true) && ((output+=10)==20)表达式返回的是false且"(output+=10)==20"表达式也没有得到执行,这条语句判断下的语句块就不会执行,所以结果就是: Not equal! 10。
第二种情况:b1=true这是一个赋值语句,返回的值自然就成了true;output+=10相当于是output=output+10结果是20,那么((output+=10)==20)表达式返回的是true,这样&&两边都是ture,整个(b1=true) && ((output+=10)==20)表达式返回值就是ture。结果自然就是: We are equal 20。




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