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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汤姆纳斯 高级黑马   /  2014-5-28 13:51  /  2111 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汤姆纳斯 于 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,请问为什么?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 加油!

查看全部评分

12 个回复

倒序浏览
因为第一个if你把false赋值给m了。要是==符号的话就竖true了

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 汤姆纳斯 于 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啊。
回复 使用道具 举报

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");
                }
        }}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
“=”是賦值運算,“==”才是比較判斷,m = false是把false的值賦給m,m==false則是判斷左右兩邊的值是否相等
回复 使用道具 举报
汤姆纳斯 发表于 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了
回复 使用道具 举报
汤姆纳斯 发表于 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.
回复 使用道具 举报
你编译通过了??if(m==false)这样是对的 ,因为你给m赋的初值就是true,if里是判断 m是否是false,但是m的值是true 所以执行的是else里的
回复 使用道具 举报
请看我给你注释了程序:

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 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中的语句。
回复 使用道具 举报
我已经懂了,谢谢大家的回答
回复 使用道具 举报
提问问题没有技术分吗:'(
回复 使用道具 举报
m=false是个赋值运算。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马