黑马程序员技术交流社区
标题: 关于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
- boolean b = true;
-
- if(b=false) //这里是将false先赋给b,然后在判断b的真假,这样就顺理成章了!!
- 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) //这里是将false先赋给b,然后再判断b的真假,这样就顺理成章了!!
作者: 王小涛 时间: 2012-9-9 23:16
收到多个哥们儿的回帖,灰常感动,灰常感谢上面几位朋友的解惑,回答的都很准确,
主要问题是我把赋值表达式看成一体去思考了,于是出现了上面的疑惑,我理解的是,完成赋值后,等号及其等号右边可以忽略不看。
谢谢了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |