黑马程序员技术交流社区

标题: 关于if(布尔型赋值表达式)的疑惑 [打印本页]

作者: 王小涛    时间: 2012-9-9 22:35
标题: 关于if(布尔型赋值表达式)的疑惑
本帖最后由 王小涛 于 2012-9-9 23:13 编辑

是毕老师Java视频里的一道练习题的延续

    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(b=false) 改为 if(b=true),结果是:   a
当把前两行代码改为
    boolean b=false;
    if(b=true)
最后运行输出的是:       a

请问这是怎么回事啊?布尔型的赋值表达式难道有真假值?
作者: 广驰    时间: 2012-9-9 23:03
这个for循环的第一个表达式的赋值有些像, if(b=false) 应该是把false赋给b判断b的值是否为真
作者: 杨卫腾    时间: 2012-9-9 23:06
   boolean b = true;

    if(b=false)  //这句话的意思就是将前边的b改为了false了,这样a就不会输出了
        System.out.println("a");
   else if(b)
        System.out.println("b");
   else if(!b) //这句就称为了真值(非假即真),所以就输出c了。

        System.out.println("c");
   else
        System.out.println("d");


经测试上面代码的结果是:     c


当把上面代码的 if(b=false) 改为 if(b=true),结果是:   a
当把前两行代码改为
    boolean b=false;
    if(b=true)
最后运行输出的是:       a

     请问这是怎么回事啊?布尔型的赋值表达式难道有真假值?
   
   哥们,这里不是说的赋值表达式的问题啦,而是这里边要的是boolean型, 你定义的b就是boolean型呀,
   比如 boolean b = true;
   System.out.println(b = false);  //结果是false,这个打印的不是赋值表达式的值,而是b的值。
   
   boolean b = false;
    System.out.println(b = true);  //结果是true,同样验证上边的结论是正确的。
  
  哥们教你一招要是看不明白了,就打印,这个真的很叼的!!屡试不爽
   
作者: 王小涛    时间: 2012-9-9 23:06
吕书凯 发表于 2012-9-9 22:51
楼主可以这样调试一下
                System.out.println(b=false);
                 System.out.printl ...

经你最先帖子的提醒,我试了试别的基本数据类型的赋值表达式,发现了自己关于赋值表达式的一个认识上的疏漏:{:3_55:}
赋值表达式完成赋值后,这个表达式的数据类型和值就是看等号左边变量的类型和值。。。
可以这样理解吗?
作者: 王宝龙    时间: 2012-9-9 23:10
  1. boolean b = true;

  2.     if(b=false) //这里是将false先赋给b,然后在判断b的真假,这样就顺理成章了!!
  3.          System.out.println("a");
  4.     else if(b)
  5.          System.out.println("b");
  6.     else if(!b)
  7.          System.out.println("c");
  8.     else
  9.          System.out.println("d");
复制代码
if(b=false) //这里是将false先赋给b,然后再判断b的真假,这样就顺理成章了!!
作者: 王小涛    时间: 2012-9-9 23:16
收到多个哥们儿的回帖,灰常感动,灰常感谢上面几位朋友的解惑,回答的都很准确,
主要问题是我把赋值表达式看成一体去思考了,于是出现了上面的疑惑,我理解的是,完成赋值后,等号及其等号右边可以忽略不看。
谢谢了!




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