黑马程序员技术交流社区

标题: 赋值问题 [打印本页]

作者: 官文昌    时间: 2012-7-21 19:03
标题: 赋值问题
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是赋值还是比较,我运行出来感觉是比较,但是比较不是应该用==吗???

作者: 王璐    时间: 2012-7-21 19:23
是赋值,条件判断false后执行了else
应用==判断条件,由于==经常误写成=
所以建议以后类似问题这也写:false==m     也就是      值==变量
如果误写成=,编译器报错。
作者: 胡文杰    时间: 2012-7-21 19:37
你只要把boolean m = false   if(m=true)看最后输出结果,你就知道是赋值还是比较了!
作者: 孙建飞    时间: 2012-7-21 19:56
是赋值 不是比较

if(m=false)      //括号中必须是布尔表达式,而且必须产生结果,而你这里只是给m赋了一个false值
{
    。。。。。。。
}
这句是错误的if语句 所以不执行里面的代码 ,而执行else中的代码
所以执行结果是 打印false
作者: 王贵朝    时间: 2012-7-21 21:08
Java中是使用两个==来判断相等性的,=是赋值运算符。所以您是在把booleam的值赋值为false,这段代码的结果将永远是false
boolean m = true;
    if (m = false)//这里之所以可以这么赋值是应为m的数据类型是boolean的,如果换做其他的编译就会报错
     {
      System.out.println("true");
    } else
       {
         System.out.println("false");
       }
作者: 封明川    时间: 2012-7-21 21:30
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判断的是布尔型的,所以你赋值也没问题
作者: 朱东方    时间: 2012-7-21 21:35
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");
        }
    }
}
作者: 张世威    时间: 2012-7-21 23:22
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
=是赋值运算符,所以这里的m=false; 必然是将false赋给m。至于把它放到if语句的条件判断中的值是多少,介绍你一个方法
System.out.println((m=false));
以后碰到类似情况,都可以通过打印语句进行调试。

作者: 段应腾    时间: 2012-7-22 08:47
是赋值、将false赋给了m、所以if判断语句中永远为假、 所以 直接执行else语句 结果为false




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