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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小涛 初级黑马   /  2012-9-9 22:35  /  2191 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王小涛 于 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

请问这是怎么回事啊?布尔型的赋值表达式难道有真假值?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人发帖,多多加油

查看全部评分

6 个回复

倒序浏览
这个for循环的第一个表达式的赋值有些像, if(b=false) 应该是把false赋给b判断b的值是否为真
回复 使用道具 举报
   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:12

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 很详细的解答

查看全部评分

回复 使用道具 举报
吕书凯 发表于 2012-9-9 22:51
楼主可以这样调试一下
                System.out.println(b=false);
                 System.out.printl ...

经你最先帖子的提醒,我试了试别的基本数据类型的赋值表达式,发现了自己关于赋值表达式的一个认识上的疏漏:{:3_55:}
赋值表达式完成赋值后,这个表达式的数据类型和值就是看等号左边变量的类型和值。。。
可以这样理解吗?
回复 使用道具 举报
  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的真假,这样就顺理成章了!!
回复 使用道具 举报
收到多个哥们儿的回帖,灰常感动,灰常感谢上面几位朋友的解惑,回答的都很准确,
主要问题是我把赋值表达式看成一体去思考了,于是出现了上面的疑惑,我理解的是,完成赋值后,等号及其等号右边可以忽略不看。
谢谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马