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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Paul_Chang 于 2014-10-16 12:43 编辑

:Q看到一道题目(运行结果为打印字符串“false”),为毛可以用m=false,而不是必须用“m==false”!在内存中是怎么的一个读取过程呢?最近看视频自学,这是之前在哪里看到的一个题目,一直没想通,求大神解读,头都想大了!p.s.:假设我使用m==false,此时相当于判断,判断结果为false,这个结果false是在内存哪里被读取的呢?
尝试运行下面的代码会发生什么?
public class Test
{
   public static void main(String[] args)
{
      boolean m = true;
      if (m = false)
{
          System.out.println("true");
      } else {
          System.out.println("false");
      }
   }
}
A. 输出字符串”true”
B. 输出字符串”false”
C. 编译时错误
D. 运行时错误


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

10 个回复

倒序浏览
答案B,=是赋值吧。==是用来判断吧。。我的理解
回复 使用道具 举报
内存中的读取过程:建立布尔型m的时候,在栈内存中开辟空间,并赋值 为true。if语句进行判断,读取栈内存中m储存的值,为true。所以运行else。输出为flase

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
if内加入的就是条件表达式,条件表达式的运算结果就是boolean型的,这样写就相当于if(false)
回复 使用道具 举报
Eagle 发表于 2014-10-15 10:09
内存中的读取过程:建立布尔型m的时候,在栈内存中开辟空间,并赋值 为true。if语句进行判断,读取栈内存中 ...

感谢回复!!!:handshake...我还想问一下:假设我使用m==false,此时相当于判断,判断结果为false,这个结果false是在内存哪里被读取的呢?
回复 使用道具 举报
Paul_Chang 发表于 2014-10-16 08:56
感谢回复!!!...我还想问一下:假设我使用m==false,此时相当于判断,判断结果为false,这个结果fal ...

是返回的。应该是函数返回吧。方法存在方法区。可能是方法区返回的。不清楚。可以问他们大牛。
回复 使用道具 举报
Eagle 发表于 2014-10-16 09:05
是返回的。应该是函数返回吧。方法存在方法区。可能是方法区返回的。不清楚。可以问他们大牛。 ...

谢谢啊..刚来论坛不久啊,不知如何召唤大牛,哈哈,再探索哈,不行得好好查查.
回复 使用道具 举报
Eagle 高级黑马 2014-10-16 09:15:31
8#
Paul_Chang 发表于 2014-10-16 09:07
谢谢啊..刚来论坛不久啊,不知如何召唤大牛,哈哈,再探索哈,不行得好好查查. ...

发提问帖就是召唤大牛了。哈哈,慢慢来,什么都会熟悉的
回复 使用道具 举报
我觉得答案是B,赋值运算符和==是有点混
回复 使用道具 举报
=是赋值  ==是等于  
回复 使用道具 举报
任何表达式都是有值的。
对于if ( [表达式] ) 这句话
第一步系统会先运算if括号里面的表达式,得出表达式的值,然后用这个值X替换[表达式]。
第二步就成了if(X)。

你的if里面是个“m=false”是个赋值表达式,把flase赋给m,这个表达式的值就是赋值号左边m的值,m是个false,就用flase替换“m=flase”这句话,这个false就在内存中的这里存着。然后你的if就成了
if(flase)//...
else    //...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马