黑马程序员技术交流社区

标题: if小问题 [打印本页]

作者: 宋玉    时间: 2014-2-9 14:13
标题: if小问题
本帖最后由 宋玉 于 2014-2-13 01:15 编辑

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");
上面程序可以编译运行,我想请大家帮我解释一下
if(b=false)  
为什么可以编译通过,这样写也可以吗?这么写是什么意思啊
               
作者: 2424308    时间: 2014-2-9 14:19
b=false是在为b赋值,因为b是boolean类型,所以if(b=false)就相当 if(false)一样,当然可以编译通过
作者: 郭运川    时间: 2014-2-9 17:01
if(b = false)可以通过是应为这句boolean b = true;前面把b的类型定义成了boolean类型此时在()里,先进行赋值运算b = false;然后才进行if(b)的判断,毕竟if的判断只有两种情况if(false)或者if(true);
作者: 箬竹小筑    时间: 2014-2-9 17:02
是将 false赋值给了b,导致b现在的值成了false,所以第一个if(b=false)  就是if(false),第二个else if(b),也是if(false),这两个都不能运行到,只有当if(true)时才可以运行后面的语句。
作者: 分解式    时间: 2014-2-9 17:02
=是赋值得意思,这里就相当于if b = 0;的意思
作者: 山治0712    时间: 2014-2-9 17:38
if(b=false)------>就是if(false)啊
作者: itpower    时间: 2014-2-9 17:54
if(b=false)的意思就是把false赋给b,因为是复制操作所以编译器是不会报错的,编译器只会判断b被赋值以后的真或者假...
作者: jkenny    时间: 2014-2-9 19:16
boolean b = true;
if(b=false)  //这个当然可以通过啊,(b=false)也是表达式啊。把false赋值给b
        System.out.println("a"); //假不打印a
else if(b)
        System.out.println("b"); //假不打印b
else if(!b) //!是异或,假异或等于真
        System.out.println("c"); //真打印c
else
        System.out.println("d");  //上面有个是“真”的所以这里也不打印d

答案是:c
if( )和else if( )括号中的表达式的结果必须是布尔型的(即 ture 或 false)。这点是java规定的。
你上面 if(b=false) 结果b=false是假,false是布尔型的,符合规定所以没什么问题,当然可以编译并执行。
作者: 杨殿生    时间: 2014-2-9 19:32
本帖最后由 杨殿生 于 2014-2-9 19:34 编辑

不会通过我刚运行完 你这是表达是if()需要用boolean型的

QQ图片20140209193328.jpg (105.93 KB, 下载次数: 97)

QQ图片20140209193328.jpg

作者: 苏小惠    时间: 2014-2-9 20:14
if(){}是判断语句,只要()里的结果为true,那么{}里的代码就会执行,否则就不执行直接往下继续执行。你这里的if(b = false),是判断表达式: b = false的结果是否为真,这里把false 的值赋给了 b,所以()里的结果为false,{} 不会执行。相当效果if(false)
作者: dongdong5982    时间: 2014-2-9 21:14
jkenny 发表于 2014-2-9 19:16
boolean b = true;
if(b=false)  //这个当然可以通过啊,(b=false)也是表达式啊。把false赋值给b
        ...

同意观点,=在java里是赋值的意思,




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