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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 官文昌 中级黑马   /  2012-7-21 19:03  /  1981 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Demo
{
  public static void main(String[] args)
{
        boolean m = true;
    if (m = false)
     {
      System.out.println("true");
    } else
       {
         System.out.println("false");
       }
   }
}

求解:m=false是赋值还是比较,我运行出来感觉是比较,但是比较不是应该用==吗???

9 个回复

倒序浏览
是赋值,条件判断false后执行了else
应用==判断条件,由于==经常误写成=
所以建议以后类似问题这也写:false==m     也就是      值==变量
如果误写成=,编译器报错。
回复 使用道具 举报
你只要把boolean m = false   if(m=true)看最后输出结果,你就知道是赋值还是比较了!
回复 使用道具 举报
是赋值 不是比较

if(m=false)      //括号中必须是布尔表达式,而且必须产生结果,而你这里只是给m赋了一个false值
{
    。。。。。。。
}
这句是错误的if语句 所以不执行里面的代码 ,而执行else中的代码
所以执行结果是 打印false
回复 使用道具 举报
Java中是使用两个==来判断相等性的,=是赋值运算符。所以您是在把booleam的值赋值为false,这段代码的结果将永远是false
boolean m = true;
    if (m = false)//这里之所以可以这么赋值是应为m的数据类型是boolean的,如果换做其他的编译就会报错
     {
      System.out.println("true");
    } else
       {
         System.out.println("false");
       }

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public class Demo
{
  public static void main(String[] args)
{
        boolean m = true;
    if (m = false)
     {
      System.out.println("true");
    } else
       {
         System.out.println("false");
       }
   }
}

求解:m=false是赋值还是比较,我运行出来感觉是比较,但是比较不是应该用==吗???
m=false是赋值,这里因为m是布尔类型的,if判断的是布尔型的,所以你赋值也没问题

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public class Demo
{
   public static void main(String[] args)
{
         boolean m = true;
     if (m = false) //一个等号=,是赋值。if(m=false)的意思就是if(false).。所以会执行else后面的语句。如果改成if(m==false),也会执行else语句,因为m!=false。这个你只需要看()括号里面是true还是false
      {
       System.out.println("true");
     } else
        {
          System.out.println("false");
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
public class Demo
{
  public static void main(String[] args)
{
        boolean m = true;
    if (m = false)
     {
      System.out.println("true");
    } else
       {
         System.out.println("false");
       }
   }
}


1 m=false 是赋值,即把内存中false值的地址传递给m,让这个变量m指向false,赋值完后整个语句的值还是m,也就是说
  m=false赋值完后返回的结果是m的值(已经被赋为false);

2所以if(m=false){}  相当于 if(false){}  。
假设int m=10;  if(m=100){} 就相当于 if(100){},而if语句里面只能判读boolean型,
而boolean类型于其它类型是不能转换的,所以必然出错。
回复 使用道具 举报
程潇 中级黑马 2012-7-21 23:28:34
9#
=是赋值运算符,所以这里的m=false; 必然是将false赋给m。至于把它放到if语句的条件判断中的值是多少,介绍你一个方法
System.out.println((m=false));
以后碰到类似情况,都可以通过打印语句进行调试。

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
是赋值、将false赋给了m、所以if判断语句中永远为假、 所以 直接执行else语句 结果为false
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马