黑马程序员技术交流社区

标题: 关于if的疑问 [打印本页]

作者: 鲍阳    时间: 2015-3-13 01:21
标题: 关于if的疑问
  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?
复制代码



作者: 杨强彪    时间: 2015-3-13 11:36
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");       //否则  执行这句
        }

        }

}

作者: huzuolin    时间: 2015-3-13 11:54
应该是if()里面的条件语句是否跟外面给他赋的值是否一直,不然就执行else语句里面的
作者: 埗箬    时间: 2015-3-13 11:57
赋值给m为false,结果为假,所以执行else
作者: 理当如此    时间: 2015-3-13 14:11
if(条件表达式)
{
执行语句;
}
m=false就是条件表达式,这个代码的意思是说如果m为false,就执行下面的执行语句。如果m不是false,就不执行。条件表达式不一定是m>3之类的条件,它可以有很多种
作者: 鲍阳    时间: 2015-3-13 14:28
本帖最后由 鲍阳 于 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:37
理当如此 发表于 2015-3-13 14:11
if(条件表达式)
{
执行语句;

a==false  才是条件表达式 a=false 赋值
作者: 理当如此    时间: 2015-3-13 14:44
杨强彪 发表于 2015-3-13 14:37
a==false  才是条件表达式 a=false 赋值

哦,你是对的,没注意:L
作者: 小七的    时间: 2015-3-13 15:01
if()后面的括号里,需要的是一个条件语句,而你写的m=false是一个赋值语句,将false赋值给m,而不是判断m是否等于false,应该改成:if(m==false)才对。
作者: 付家辉    时间: 2015-3-13 15:20
你是将false赋值给了m也就是改变了m的值。所以得到这个结果。
作者: hamesksk    时间: 2015-3-13 15:26
这个代码会编译错误 ,不可能正常运行!
你检查一下是不是其它地方你搞错了。


作者: vayne    时间: 2015-3-13 15:59
if()  根据括号里的值是否是true或是false来判断,你写的是把m重新赋值了一遍,所以这个程序依然能运行
作者: 东方蓂荚    时间: 2015-3-13 16:49
if后面的语句是一个判断类型的语句,能返回一个boolean值就可以运行
作者: 关山明月    时间: 2015-3-13 22:06
将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
这里m是boolean,只有if里面m为true时,才会返回true,其它都返回false
作者: 739262720    时间: 2015-3-13 23:27
哥们你是在获取技术分吗
作者: 大神在何方    时间: 2015-3-13 23:37
我也才刚学到if这个语句
作者: java梦想    时间: 2015-3-13 23:59
          if语句主要是讲的是条件语句,条件满足就执行何种操作,不满足条件就执行对立的指令或者其他的指令。还有就是一环套一环条件的那种。
作者: 执念    时间: 2015-3-14 00:10
if(判断【true or  false】)、、、、满足true、false都能执行
作者: 和谐木马    时间: 2015-3-14 00:19
hamesksk 发表于 2015-3-13 15:26
这个代码会编译错误 ,不可能正常运行!
你检查一下是不是其它地方你搞错了。

只要条件表达式能返回一个boolean类型的值就能正确通过编译执行,这里也有很多人都说清楚了,会把false赋值给m,m本身值就是个boolean类型,就会返回本身的值!




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