黑马程序员技术交流社区

标题: 问一个关于if的程序 [打印本页]

作者: 汤姆纳斯    时间: 2014-5-28 13:51
标题: 问一个关于if的程序
本帖最后由 汤姆纳斯 于 2014-5-29 10:57 编辑

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


这个程序运行之后结果是false,请问为什么?
作者: yang1352546    时间: 2014-5-28 13:59
因为第一个if你把false赋值给m了。要是==符号的话就竖true了
作者: 汤姆纳斯    时间: 2014-5-28 14:02
本帖最后由 汤姆纳斯 于 2014-5-28 14:16 编辑
yang1352546 发表于 2014-5-28 13:59
因为第一个if你把false赋值给m了。要是==符号的话就竖true了

boolean m =ture这句什么意思?如果是if(m==false)的话又是什么意思呢?我试了下改成if(m==false)输出的还是false啊。

作者: 海世山盟    时间: 2014-5-28 14:21

public class Test {
        public static void main(String[] args) {
                boolean m = true;//初始化m为真
                if (m = false) //这一句本来是一个判断性语句,括号里面为判断的条件,如果为真就执行大括号内容,如果为假就执行else对应的大括号内容。分析括号里面的语句  m=false 这里的表达式和上一句 boolean m=true 性质一样,也就是将已经初始化为真的m再次初始化为了假。因此if小括号里面的表达式的值就为假。
也就是说小括号里面同时干了两件事   1 再次初始化m为假,2  将表达式的值作为if语句的判断标准

如果只为了判断m的值,只需要  if(m==false)
一句话,一个等号的是赋值初始化语句,两个等号才是单纯的判断语句
{
                        System.out.println("true");
                } else {
                        System.out.println("false");
                }
        }}
作者: pk49800    时间: 2014-5-28 14:40
“=”是賦值運算,“==”才是比較判斷,m = false是把false的值賦給m,m==false則是判斷左右兩邊的值是否相等
作者: 葛晓东    时间: 2014-5-28 14:52
汤姆纳斯 发表于 2014-5-28 14:02
boolean m =ture这句什么意思?如果是if(m==false)的话又是什么意思呢?我试了下改成if(m==false)输出 ...

boolean  m= ture  这句是给变量m赋值,
  
if(m==false)   这是if语句 , if后面的括号里面是个boolean类型值 ,
你把if(m=false)括号里面的赋值换成这个if(m==false)输出当然还是false  因为你在初始化m值为ture 当然不等于false    就要执行else里面的语句  就是输出false了
作者: yang1352546    时间: 2014-5-28 14:55
汤姆纳斯 发表于 2014-5-28 14:02
boolean m =ture这句什么意思?如果是if(m==false)的话又是什么意思呢?我试了下改成if(m==false)输出 ...

m=false是一个赋值的过程  就是把true这个值赋给了m                  
而m==false的意思是判断m的值是不是false ,如果是的话就是真   如果不是的话就为假
不好意思 上面我看错了    如果你是boolean m = false      下面是  if (m ==false) 这样的输出结果是 true.
作者: 蒙奇.D.路飞    时间: 2014-5-28 15:29
你编译通过了??if(m==false)这样是对的 ,因为你给m赋的初值就是true,if里是判断 m是否是false,但是m的值是true 所以执行的是else里的
作者: 小思883    时间: 2014-5-28 16:32
请看我给你注释了程序:

public class Test {
    public static void main(String[] args) {
            boolean m = true;  
            if (m = false) {//在这句的时候将false赋值给了m,所以 if语句条件为假,则执行的是else的语句
                    System.out.println("true");
            } else {
                    System.out.println("false");  //执行的是该else语句,所以输出false
            }
    }}
作者: 没壳的蜗牛    时间: 2014-5-28 17:43
汤姆纳斯 发表于 2014-5-28 14:02
boolean m =ture这句什么意思?如果是if(m==false)的话又是什么意思呢?我试了下改成if(m==false)输出 ...

=:是赋值运算符  m = false,就是将false赋给m,此时if(m = false)先将false值给m在对m进行判断,此时条件为假,就不执行if语句,而是执行else语句
==:是比较运算符  if(m == false)表示此时是判断m是否为false ,如果 是则执行if,如果不是则执行else。而你的m初始值是ture,所以是执行else中的语句。

作者: 汤姆纳斯    时间: 2014-5-28 17:57
我已经懂了,谢谢大家的回答
作者: 汤姆纳斯    时间: 2014-5-29 12:39
提问问题没有技术分吗:'(
作者: 小坏坏    时间: 2014-5-29 20:37
m=false是个赋值运算。




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