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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© osully 金牌黑马   /  2014-3-2 11:41  /  4915 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天复习时 发现以下问 if判断 括号里面竟然是赋值!!!
感觉不科学啊!!求解释,谢谢啊!
运行结果是c ,false
  1. public class Test1
  2. {
  3.         public static void main(String[] args) {
  4.                 boolean b = true;
  5.                 if(b=false)     //这里!!!!!
  6.                         System.out.println("a");
  7.                 else if(b)
  8.                         System.out.println("b");
  9.                 else if(!b)
  10.                         System.out.println("c");
  11.                 else
  12.                         System.out.println("d");
  13.                
  14.                 System.out.println(b);
  15.         }
  16. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

12 个回复

倒序浏览
  1. public class Test1
  2. {
  3.         public static void main(String[] args) {
  4.                 boolean b = true;
  5.                 if(b=false)
复制代码


回复 使用道具 举报
上面的没有都复制过来,重新给你弄一个啊

  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                
  5.                 boolean b = true;
  6.         if(b=false)     
  7.                 /*上面的if(b=false)
  8.                 相当于先为b赋值:b=false
  9.                 然后if(b)
  10.                 所以遇到!b就是真了,就执行else if(!b)里面的代码了
  11.                
  12.                
  13.                 不知道你清楚不清楚!!!
  14.                 */
  15.                 System.out.println("a");
  16.         else if(b)
  17.                 System.out.println("b");
  18.         else if(!b)
  19.                 System.out.println("c");
  20.         else
  21.                 System.out.println("d");
  22.         
  23.         System.out.println(b);
  24.         }
  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
yunzhongzhuhuo 发表于 2014-3-2 12:01
上面的没有都复制过来,重新给你弄一个啊

我的意思是 if() 括号内为什么可以写赋值语句!
理论上 不是应该是b==false 吗???
回复 使用道具 举报
本帖最后由 洋葱骑士 于 2014-3-2 12:43 编辑
osully 发表于 2014-3-2 12:20
我的意思是 if() 括号内为什么可以写赋值语句!
理论上 不是应该是b==false 吗??? ...

http://blog.csdn.net/paincupid/article/details/7463838
在if()内的判断语句少写一个"="时,仍然能被执行。括号内执行赋值语句。  但判断条件不成立,会执行else语句。当if()内的赋值语句为非boolean型时,会因为返回值不为boolean型编译不通过

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
if()里面是可以写赋值语句的,是因为,(b=flase)的这个表达式值就是false,是可以进行判断的。
写表达式不是boolean类型的值,就不能通过。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
if后面的括号里只要是个条件表达式就可以,虽然有赋值,但仍然要判断b是true还是false.

所以程序执行到(!b)的时候打印一次c,最后打印b的时候,这个时候b已经被if后面的条件语句赋值为false了。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
b = false 是一个表达式来的 这个表达式的结果是false  相当于在里面做了两件事 1.先给b赋值 2.将if语句的条件设置为false  这个完全没问题啊 一般的书上也写的是  if(表达式){执行体}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
洋葱骑士 发表于 2014-3-2 12:41
http://blog.csdn.net/paincupid/article/details/7463838
在if()内的判断语句少写一个"="时,仍然能被执 ...

其是,可以赋值,也可以判断,但是要看情况了,if里面必须是boolean型的条件,你的刚好是boolean型的,所以两种都可以了
如果是其它类型,比如int型,你这样写{int a=1 if(a=2)}就是错的了
回复 使用道具 举报
yunzhongzhuhuo 发表于 2014-3-2 14:04
其是,可以赋值,也可以判断,但是要看情况了,if里面必须是boolean型的条件,你的刚好是boolean型的,所 ...

你说的话和我回的有区别吗????
回复 使用道具 举报
if语句后面的括号中的语句只要返回boolean值就可以,
赋值语句返回左值,b = false,返回b的值,就是false;
回复 使用道具 举报
楼主,If是判断型语句,在判断相等时得用 ==:if(b == false)
==:是判断   而 = 则是赋值
if(b=false)//这是将b赋值变成了false;
变成了一个赋值动作,于是跳到下面else if(b)//而if...else if 是个整体,所以它里面的b都是未赋值前的true;
所以else(b)不满足;然后跳到了else(!b)//此时b的值是false.所以符合,打印了一次c,然后判断结束,打印了一次b..
所以结果是:c , false...

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这个是可以的
因为首先定义了一个boolean型的变量.变量是可以变化的.之后的if(b=false)   就是把b变成false了.
之后的就是如果是false就输出"a".
但这个不能和==搞混了,=和==是完全不同的.之前我对着也很迷糊.

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马