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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sk120110 中级黑马   /  2014-7-7 01:34  /  1919 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

boolean b=true;
if(b=false)
{
        System.out.println("a");
}
else if(b)
{
        System.out.println(b);       
}
else if(!b)
{
        System.out.println("c");
}
else
        System.out.println("d");

输出结果是c
我的问题是if后面应该是判断语句,结果是一条赋值语句,那还怎么工作?还用不用判断?难道不判断,直接跳到else if?还有else if(b)这条,判断语句b是什么意思?

8 个回复

倒序浏览
if(b=false)  赋值语句返回值 等于b的值 即false  
所以执行后面的else if(b)  此时 b=false 所以执行
else if(!b)  !b = ture  所以 System.out.println("c");
程序结束
回复 使用道具 举报
韩天雷 发表于 2014-7-7 01:38
if(b=false)  赋值语句返回值 等于b的值 即false  
所以执行后面的else if(b)  此时 b=false 所以执行
else ...

那if后面就是赋值语句并返回值,但是不进行判断?按理说if后面不应该是个判断语句吗?
回复 使用道具 举报
本帖最后由 韩天雷 于 2014-7-7 01:53 编辑

if后 是一个布尔值  比如  if(ture){}  
判断的结果不也是ture 和false两个布尔值吗
回复 使用道具 举报
困惑来自对基本概念的理解不到位。什么是语句(statement)?末尾带分号(;)的才是语句。if(b=false)的b=false带分号了吗?没有!所以它不是语句。而且,if()的括号里也不允许是语句。那么b=false是什么?它是表达式(expression)。表达式和语句有什么区别?表达式一定有一个值,语句则不一定,比如break;语句就没有值。b=false作为赋值表达式,它的值就是b被赋予的值,也就是false。所以if(b=false)等价于if(false),即判断为条件不成立,要执行else分支

点评

对~赋值表达式  发表于 2014-7-7 01:58
回复 使用道具 举报
谢谢各位,我好像懂了,if后面本来就是true和false。这就话的意思就是在栈内存中开辟一个没有名字的false空间,b的地址指向他。这样理解对吗?
回复 使用道具 举报
sk120110 发表于 2014-7-7 02:08
谢谢各位,我好像懂了,if后面本来就是true和false。这就话的意思就是在栈内存中开辟一个没有名字的false空 ...

显然不对。“在栈内存中开辟一个没有名字的false空间,b的地址指向他”你仔细分析一下你的这句话,想想是不是有充分的依据下这个结论。其实这个题完全没必要跟内存模型这么底层的东西去联系。记住两点即可:
1. if()的括号里要求一个表达式,这个表达式的值必须是true或者false
2. 赋值表达式b=false的值就是b被赋予的值false。所以if(b=false)等价于if(false)
回复 使用道具 举报
简单来说 真就走if,假就不走
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马