黑马程序员技术交流社区

标题: 赋值运算符=,与比较运算符==,内存读取过程?! [打印本页]

作者: Paul_Chang    时间: 2014-10-15 09:57
标题: 赋值运算符=,与比较运算符==,内存读取过程?!
本帖最后由 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. 运行时错误



作者: Eagle    时间: 2014-10-15 10:06
答案B,=是赋值吧。==是用来判断吧。。我的理解
作者: Eagle    时间: 2014-10-15 10:09
内存中的读取过程:建立布尔型m的时候,在栈内存中开辟空间,并赋值 为true。if语句进行判断,读取栈内存中m储存的值,为true。所以运行else。输出为flase
作者: 刘家斌    时间: 2014-10-15 10:10
if内加入的就是条件表达式,条件表达式的运算结果就是boolean型的,这样写就相当于if(false)
作者: Paul_Chang    时间: 2014-10-16 08:56
Eagle 发表于 2014-10-15 10:09
内存中的读取过程:建立布尔型m的时候,在栈内存中开辟空间,并赋值 为true。if语句进行判断,读取栈内存中 ...

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

是返回的。应该是函数返回吧。方法存在方法区。可能是方法区返回的。不清楚。可以问他们大牛。
作者: Paul_Chang    时间: 2014-10-16 09:07
Eagle 发表于 2014-10-16 09:05
是返回的。应该是函数返回吧。方法存在方法区。可能是方法区返回的。不清楚。可以问他们大牛。 ...

谢谢啊..刚来论坛不久啊,不知如何召唤大牛,哈哈,再探索哈,不行得好好查查.
作者: Eagle    时间: 2014-10-16 09:15
Paul_Chang 发表于 2014-10-16 09:07
谢谢啊..刚来论坛不久啊,不知如何召唤大牛,哈哈,再探索哈,不行得好好查查. ...

发提问帖就是召唤大牛了。哈哈,慢慢来,什么都会熟悉的
作者: asdf19910719    时间: 2014-10-16 11:29
我觉得答案是B,赋值运算符和==是有点混
作者: 最给力回复    时间: 2014-10-16 12:08
=是赋值  ==是等于  
作者: ifinver    时间: 2014-10-16 14:27
任何表达式都是有值的。
对于if ( [表达式] ) 这句话
第一步系统会先运算if括号里面的表达式,得出表达式的值,然后用这个值X替换[表达式]。
第二步就成了if(X)。

你的if里面是个“m=false”是个赋值表达式,把flase赋给m,这个表达式的值就是赋值号左边m的值,m是个false,就用flase替换“m=flase”这句话,这个false就在内存中的这里存着。然后你的if就成了
if(flase)//...
else    //...




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