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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
   boolean m = true;
   if (m = false) {
    System.out.println("true");
   } else {
    System.out.println("false");
   }
  }
请问这个程序为什么没有报错,还能输出结果?      求大神指教。3q

14 个回复

倒序浏览
longforus 来自手机 中级黑马 2016-7-13 22:39:11
沙发
输出的false么?
回复 使用道具 举报
代码语法没问题,基本是不会报错的,你给m赋值false了
这个代码等价于 if(false)
回复 使用道具 举报
这个结果应该是 flase ,因为你定义了  boolean   m是真,那么  在判断第一个条件中,必须满足m为假才可以进入,明显不满足,所以进入else 语句体中  执行该语句,打印输出false  记住一点,只要 if(条件)   中  条件结果为true时就可以执行,这个true指的是条件整体,而不是条件其中某一个变量
回复 使用道具 举报
你首先定义了boolean m = true 然后 if (m = false) 这一步是把false赋给m相当于重新赋值了,此时if判断为真所以会输出,而且此时输出true;如果你把=改为==效果就不一样了,此时输出false,这就是赋值”=“和等于“==”的区别
回复 使用道具 举报
夏萱 发表于 2016-7-13 22:45
代码语法没问题,基本是不会报错的,你给m赋值false了
这个代码等价于 if(false) ...

哦 多谢,我理解有误,以为 if(m=false)  语法错误,应该是if(m == false)   现在明白了,只要它的表达式结果是boolean类型就可以。
回复 使用道具 举报
Petter 中级黑马 2016-7-13 23:37:20
7#
lsp0523 发表于 2016-7-13 22:55
你首先定义了boolean m = true 然后 if (m = false) 这一步是把false赋给m相当于重新赋值了,此时if判断为 ...

我运行后,发现,这个程序会有警告,如果把''=''改为 ''==''就没有警告了,输出结果还是一样的。
回复 使用道具 举报
夏萱 中级黑马 2016-7-14 09:37:06
8#
Petter 发表于 2016-7-13 23:37
我运行后,发现,这个程序会有警告,如果把''=''改为 ''==''就没有警告了,输出结果还是一样的。 ...

警告和这个语法没有关系


The value of the local variable m is not used        Demo1.java       

警告的是你定义的变量 m 没有被调用

boolean m = true;//声明变量
m = false;//变量赋值

之后这个变量没有被使用
回复 使用道具 举报
夏萱 中级黑马 2016-7-14 09:46:00
9#
本帖最后由 夏萱 于 2016-7-14 10:20 编辑

这段代码在语法上是没有问题的,而且也确实会在if中使用=赋值
例如:
public class Demo1 {
        public static void main(String[] args)
        {

                boolean m;
                int a =3, b = 5;
                if(m = a>b)
                        {System.out.println("执行A方法");}
                else
                        {System.out.println("执行B方法");}

                System.out.println("m = " + m);
        }
}
但是如果你设置IDE帮你检查if中是否使用了=程序可以给出警告
回复 使用道具 举报
夏萱 发表于 2016-7-14 09:46
这段代码在语法上是没有问题的,而且也确实会在if中使用=赋值
例如:
public class Demo1 {

为什么要把值赋给m进行判断呢?直接 if (a > b) 判断不行吗?
回复 使用道具 举报
雷雨天 发表于 2016-7-14 10:05
为什么要把值赋给m进行判断呢?直接 if (a > b) 判断不行吗?

我又犯傻了 m = a>b 就可以了
boolean型一般会用来作为标志变量,随时根据情况赋值。
回复 使用道具 举报
夏萱 发表于 2016-7-14 10:19
我又犯傻了 m = a>b 就可以了
boolean型一般会用来作为标志变量,随时根据情况赋值。
...

有道理有道理!
回复 使用道具 举报
看看,学学1
回复 使用道具 举报
本帖最后由 13182002757 于 2018-12-27 09:16 编辑

--------------------------
回复 使用道具 举报
夏萱 发表于 2016-7-14 09:46
这段代码在语法上是没有问题的,而且也确实会在if中使用=赋值
例如:
public class Demo1 {

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