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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先先看题目,具体如下:

下面程序执行的结果是?( )
boolean b=true;
if(b=false)
{
        System.out.println("a");
}
else if(b)
{
        System.out.println("b");       
}
else if(!b)
{
        System.out.println("c");
}
else
{
        System.out.println("d");
}
A.        a   
B.        b  
C.        c
D.        d
答案是c.  
我的疑点在选项A中  ,我的理解是if后面这个挨着的小括号里应该是条件语句,而且只可能有true或false种情况,
而b=false只是一个赋值语句,   那为何在此处编译通过???  难道赋完值后又单独再次判断b的值???   不知道为何,我同学说的我理解不过去,  求懂的帮忙解答下,不胜感激

24 个回复

倒序浏览
写错了......................
我的疑点在选项if中,即  if (b = false)  ,我的理解是if后面这个挨着的小括号里应该是条件语句,而且只可能有true或false种情况,
而b=false只是一个赋值语句,   那为何在此处编译通过???  难道赋完值后又单独再次判断b的值???   不知道为何,我同学说的我理解不过去,  求懂的帮忙解答下,不胜感激
回复 使用道具 举报
怎么弄悬赏技术分?指导下
回复 使用道具 举报
因为b=false,b是boolean型的,所以这句话也有返回值,是false。如果换成int x = 14这样的语句,是不行的。变量赋值也有返回值
回复 使用道具 举报
李永佳 发表于 2015-12-30 15:40
因为b=false,b是boolean型的,所以这句话也有返回值,是false。如果换成int x = 14这样的语句,是不行的。 ...

为什么这个赋值语句会有返回值?   (b=false)==false吗
回复 使用道具 举报
又学到了
回复 使用道具 举报
其实就是 B C 徘徊而已,B不成立的原因在于他本身就是假的下面肯定不执行, !false 就是真了 比较简单, if 一旦有结果之后的不执行D 排除,  所以C  soeasy
回复 使用道具 举报
马赛 中级黑马 2015-12-31 00:01:08
8#
应该是在第一个判断语句的时候,把b的值改成了false,判断语句里是false不会执行大括号里边的,!b现在是true,所以执行c,else里边的自然也就不执行了.我是根据结果推的原因,应该是这样把
回复 使用道具 举报
Clouddd 中级黑马 2015-12-31 09:25:27
9#
这个问题楼上已经把要点说出来了,根原因是这句话if(b=false)。由于b本来就是个Boolean类型,那b它自己本身就是个判断条件,所以在b=false这个过程中,你把false赋值给b,所以在if中就是if(false),因此这个if..else.if只会进入到System.out.println("c");
另外,在if()括号中的是只能是true或者false,像直接的赋值语句是不行的,比如int x = 1, 因为这个赋值语句没有任何Boolean类型的返回值, 如果是if((int x = 1) == 1)这样的话就可以了。这个问题在你以后很容易就可以弄懂的啦,目前只要记住if()这个括号中必须是boolean值就可以,无论它里面是怎么实现的。
回复 使用道具 举报
旺仔小石头 发表于 2015-12-30 16:59
为什么这个赋值语句会有返回值?   (b=false)==false吗

对呀,我也是在别的论坛里看到的,给b=false赋值,返回值就是false,给int a = 10赋值,返回值就是10.我是这样理解的
回复 使用道具 举报
楼主的意思:
1.if后面这个挨着的小括号里应该是条件语句,而且只可能有true或false种情况
2.if (b = false) 中b=false只是一个赋值语句,   那为何在此处编译通过

第一、if (b = false),是这样的:
1.先将 false的值赋给b,此时的b就成了false
2.然后 if(b),其实就是if(false)

第二、关于"="赋值运算符
1.表示把右边的值赋给左边
2.b=false,由于b是boolean类型的,false也是boolean类型的,所以赋值会成功,而且是if要的boolean类型,
所以,编译会成功。

第三、if()括号中要的是一个boolean值,不局限于形式,只要最后的结果:
1:可以是这样boolean b = true;
     if(b){}  或者  if(!b){}
2:可以是这样的 int a = 2, b = 3;
   if(a==b){}

最后,如果楼主还是不太理解的话,我建议你输出一下,看看结果到底的是什么,你也可以把你所有困惑的运算都输出一下,看看运算结果
boolean b = true;
System.out.println(b = false);
回复 使用道具 举报
挖坑不止
回复 使用道具 举报
本帖最后由 Forwhat 于 2015-12-31 16:12 编辑

现在重点不是第一个if(b=false),而是这个IF本身为什么没有执行而输出a,反而输出的是C?返回值之类的有点太笼统了吧,具体返回的是什么有人查过么?我记得C语言的赋值语句返回值就是其本身,举个例子说就是"a=1",返回值就是1,布尔类型同上,java估计也是适用的吧,不然为什么第一个if(b=false){}中括号内的语句没有执行呢!
也就是说b=false本身这赋值语句返回值就是false,
综上这第一个if(b=false)语句可以等价于if(false),所以输出的不会是a!
后面的语句就简单了,因为b的值变为了false,所以“!b”就是"true",自然就会执行输出c了
回复 使用道具 举报
Hi刘腾 发表于 2015-12-31 12:36
楼主的意思:
1.if后面这个挨着的小括号里应该是条件语句,而且只可能有true或false种情况
2.if (b = false) ...

看来我只能这样理解了  谢了兄弟

捕获.PNG (10.02 KB, 下载次数: 32)

捕获.PNG
回复 使用道具 举报
雨来 高级黑马 2015-12-31 20:26:48
15#
b=false  这是一个赋值表达式吧  表达式运算后总会有个结果的;那么结果是什么呢? 当然是左边的变量了  其实运算后 再参与运算的话  用的是b变量的值  也就是false
回复 使用道具 举报
雨来 发表于 2015-12-31 20:26
b=false  这是一个赋值表达式吧  表达式运算后总会有个结果的;那么结果是什么呢? 当然是左边的变量了  其 ...

额  ,a = 5 ,这个表达式的结果是a吗
回复 使用道具 举报
小五哥 来自手机 中级黑马 2015-12-31 21:20:43
17#
看不懂~
回复 使用道具 举报
旺仔小石头 发表于 2015-12-31 21:03
额  ,a = 5 ,这个表达式的结果是a吗

是的,我不知道你现在学到哪里了,你在输入语句里打印一个这个a=5 试一下看看结果是什么?

class FuResult {
        public static void main(String[] args) {
                int a;
                System.out.println(a=5);
        }
}
回复 使用道具 举报
没有返回值的,只有在函数里;如返回值类型是void 我们只所以用表达  是因为我们要取里的值参与运算;如果没有值的话,我们为什么要写表达式呢?就向我们做什么事情,都有目的性的;如你去吃饭说明你饿了,你去教师说明你要学习,一切都以使用为目的;面向对象就是这这样的有的时候你想不通一件事情的时候,向反的方向想一下你就会豁然开朗的。
回复 使用道具 举报
雨来 发表于 2016-1-1 08:53
没有返回值的,只有在函数里;如返回值类型是void 我们只所以用表达  是因为我们要取里的值参与运算;如果 ...

感谢兄弟认真的回复
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马