A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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);

}

那位牛人解释一下!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

7 个回复

正序浏览
杨鹏 中级黑马 2012-5-11 11:18:34
8#
这是运算符执行的流程问题。
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。
回复 使用道具 举报
if(b1=true) 是将b1赋值为true,返回1;if(b1==true) 返回0.
回复 使用道具 举报
应该是:==就是,第一个条件只要为false,就停止判断。
回复 使用道具 举报
==与=的问题:
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,就停止判断。
回复 使用道具 举报
楼上正解
回复 使用道具 举报
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);

}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
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);

}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马