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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲍阳 中级黑马   /  2015-3-13 01:21  /  1440 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void main(String[] args) {
  2.                 boolean m = true;
  3.                 if (m=false) {
  4.                         System.out.println("true");
  5.                 } else {
  6.                         System.out.println("false");
  7.                 }
  8.         }
  9. if后面不是要跟条件语句吗?这个程序怎么能正确运行呢,为什么可以放m=false?
复制代码


21 个回复

倒序浏览
package com.mianxiangduixiang;

public class Test1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                boolean m = true;
        if (m=false) {                  //当if外面出现 false赋值给m情况时,执行下面语句
                System.out.println("true");
        } else {
                System.out.println("false");       //否则  执行这句
        }

        }

}

点评

就算boolean m=false,也会执行else。这时m是布尔型,只有if里面m=true,才会返回true  发表于 2015-3-13 22:15
回复 使用道具 举报
应该是if()里面的条件语句是否跟外面给他赋的值是否一直,不然就执行else语句里面的
回复 使用道具 举报
赋值给m为false,结果为假,所以执行else
回复 使用道具 举报
if(条件表达式)
{
执行语句;
}
m=false就是条件表达式,这个代码的意思是说如果m为false,就执行下面的执行语句。如果m不是false,就不执行。条件表达式不一定是m>3之类的条件,它可以有很多种
回复 使用道具 举报
本帖最后由 鲍阳 于 2015-3-13 14:33 编辑
杨强彪 发表于 2015-3-13 11:36
package com.mianxiangduixiang;

public class Test1 {

觉得你这句不对啊。照着你的逻辑,如果if外面出现相同的xx语句,那就怎么怎么判断。我把boolean m=true换成int x=5,if括号里换成x=6,按你说的就该能判断执行,事实上报错了:不兼容的类型;把if(m=false)换成if(false=m)也报错,意外的类型,false处需要变量找到值,说明不是把=当成==了;估摸着真实情况是:先对括号里进行计算,尽管是个赋值操作不是判断,但是这个变量的值刚好是boolean型的,刚好符合要求;就好像if(5+3>4),虚拟机遇到这种不能一眼望到底的式子会先计算出个最终结果,再来判断;而if(x=5)化成if(x)后也不符合要求
回复 使用道具 举报
理当如此 发表于 2015-3-13 14:11
if(条件表达式)
{
执行语句;

a==false  才是条件表达式 a=false 赋值

点评

刚开始我也没注意  发表于 2015-3-14 00:18
回复 使用道具 举报
杨强彪 发表于 2015-3-13 14:37
a==false  才是条件表达式 a=false 赋值

哦,你是对的,没注意:L
回复 使用道具 举报
if()后面的括号里,需要的是一个条件语句,而你写的m=false是一个赋值语句,将false赋值给m,而不是判断m是否等于false,应该改成:if(m==false)才对。
回复 使用道具 举报
你是将false赋值给了m也就是改变了m的值。所以得到这个结果。
回复 使用道具 举报
这个代码会编译错误 ,不可能正常运行!
你检查一下是不是其它地方你搞错了。

回复 使用道具 举报
vayne 中级黑马 2015-3-13 15:59:30
12#
if()  根据括号里的值是否是true或是false来判断,你写的是把m重新赋值了一遍,所以这个程序依然能运行
回复 使用道具 举报
if后面的语句是一个判断类型的语句,能返回一个boolean值就可以运行
回复 使用道具 举报
将false的值赋给了m,然后判断的是m,所以为false。所以这里应该是先赋值,然后再判断。如下:
  1. public class Test2 {
  2. public static void main(String[] args) {
  3.                 boolean m = false;                               
  4.                 if (m=true) {
  5.                         System.out.println("true");
  6.                 } else {
  7.                         System.out.println("false");
  8.                 }
  9.         }
  10. }
复制代码

结果是:true

就像b=a++一样,先将a的值赋给b,然后a 再自增。你这里是将 false赋给m,然后再在if里进行判断。
回复 使用道具 举报
kfcka 中级黑马 2015-3-13 22:17:28
15#
这里m是boolean,只有if里面m为true时,才会返回true,其它都返回false
回复 使用道具 举报
哥们你是在获取技术分吗
回复 使用道具 举报 0 1
我也才刚学到if这个语句
回复 使用道具 举报
          if语句主要是讲的是条件语句,条件满足就执行何种操作,不满足条件就执行对立的指令或者其他的指令。还有就是一环套一环条件的那种。
回复 使用道具 举报
if(判断【true or  false】)、、、、满足true、false都能执行
回复 使用道具 举报
hamesksk 发表于 2015-3-13 15:26
这个代码会编译错误 ,不可能正常运行!
你检查一下是不是其它地方你搞错了。

只要条件表达式能返回一个boolean类型的值就能正确通过编译执行,这里也有很多人都说清楚了,会把false赋值给m,m本身值就是个boolean类型,就会返回本身的值!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马