一道模拟题--迷惑中

Philzzf 2002-11-21 09:08:32
boolean m = true;
if(m=false)
System.out.println("False");
else
System.out.println("True");
执行后的输出是什么?
boolean m = true;
if(m=true)//更改之处
System.out.println("False");
else
System.out.println("True");
这个执行后的输出又是什么?
















--------------------------------------
结果分别是"False"和"True"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

上机测试的结果,我怀疑自己的编译器错了.
能告诉我为什么吗,
焦急迷惑中!

...全文
52 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmvigour 2002-11-28
  • 打赏
  • 举报
回复
True
Fasle
我运行就是这个结果!
此题考点是boolean的值true false 还有就是(+-)=*/之类的优先级别吧 if的表达式必须是boolean的!我的理解
szasgmg 2002-11-22
  • 打赏
  • 举报
回复
因为m恰好是一个布尔类型,所以返回值就是作为if()的条件,这题的考点有两个:
一个是if语句中条件的类型,在我考的SCJP1.4中有好几道是这样的!
第二个是副值语句!
由于是根据副值来作为if的判断语句,在你的代码1中永远都不可能输出:False
chrischen79 2002-11-22
  • 打赏
  • 举报
回复
你可以把if(m=true/false)和
m=ture/false;
if(m)
看成是等效的

java中这个m必须是boolean
c/c++中没有这个限制,int,char,long都可以
leojay 2002-11-22
  • 打赏
  • 举报
回复
是这样的,
m=true这个表达式也是有返回值的,他的返回值就是m.

你知道有这样的写法吗: a = b = 5 ,不管a,b之前是什么值,这个表达式执行了之后就是a和b都是5了。
他的执行顺序是:
1. b = 5 ,这个式子返回5
2. a = 5 , 这个5是上面返回的值。

if(m=true) 的执行顺序是:
1. m=true 这个式子的返回值是m
2. if ( 1的返回值即m ) 而这时的m 为true

当m=true时
if(m==true)的执行顺序是:
1. m == true 因为m=true所以返回true
2. if ( 1的返回值即true )
所以两个式子最后都相当于 if( true ) 所以相同
Philzzf 2002-11-22
  • 打赏
  • 举报
回复
我是楼主!
输出结果开始弄错了,正确的应该是你们说的那样:
第一个是True
第二个是False
(发贴的时候处于糊涂的状态,所以发错了,:((

能否有一个合理的解释呢?

当m=true时
if(m==true)和if(m=true)的结果是一样的,
反之同理!

怎么样解释呢,m=true有返回值这个我是知道的。
但什么情况下返回false,什么情况下返回true,判断依据又是什么?
v_olcano 2002-11-22
  • 打赏
  • 举报
回复
第一个应该是true
第二个应该是false
chrischen79 2002-11-22
  • 打赏
  • 举报
回复
我也试过了,第一个是True,楼主你是不是弄错了?
Anubis12345 2002-11-22
  • 打赏
  • 举报
回复
呵呵
其实 assert 也可以这样骗人的
不过更难看出来~~

assert m=false:false;

不过只要记住 在 java 中 整个表达试的值 就是 赋值号= 左边的变量的值
因此, n=1; 为 int 类型 , b=true;为 boolean 类型
和 C++ 中一样的哈
qxjavajava 2002-11-22
  • 打赏
  • 举报
回复
class mmT
{
public static void main(String[] args)
{
boolean m = true;
if(m=true)
{
System.out.println("Hello World!");
}
}
}
-------------考试可以,工作的时候,强烈建议不要写这么暧昧的语句。
RedBeret 2002-11-22
  • 打赏
  • 举报
回复
首先,if()语句中的表达式必须是布尔值,请深刻理解这一点。

if(m=false)作为以下两个语句看待就好理解了:

m=false;
if(m) //这句其实等价于 if(m==true),而此时的 m 值为 false,
//所以,流程转到 else 执行,输出为True。

第二个例子同理。
qxjavajava 2002-11-21
  • 打赏
  • 举报
回复
if(m=false)--------------这种写法.居然能通过?
chrischen79 2002-11-21
  • 打赏
  • 举报
回复
我马上自己去测试一下

有种信仰被颠覆的感觉
peppi 2002-11-21
  • 打赏
  • 举报
回复
确定!
我在JB下复制你的代码,OK.没问题.
前输出true,后输出false
Philzzf 2002-11-21
  • 打赏
  • 举报
回复
to: peppi(一凡)

你确定你的结果吗???
Philzzf 2002-11-21
  • 打赏
  • 举报
回复
TO:szasgmg(小强)
谢谢,结果应该是你说的那样。

发现:
m=true时
if(m==true)和if(m=true)的结果是一样的,
反之同理!

怪怪怪!!!!!!
peppi 2002-11-21
  • 打赏
  • 举报
回复
我测试时明明是输出
true
是你的环境问题吧?
szasgmg 2002-11-21
  • 打赏
  • 举报
回复
对了,你写的代码测试结果是:True 和 False!
szasgmg 2002-11-21
  • 打赏
  • 举报
回复
这个问题在考前我也糊涂了,应该是这样:
if(m=false)中是副值false给m,m原来是true,由于m是布尔类型,副值后满足if语句要求。但如果把m定义为int的话,if(m=1)这样就不行了!
比你这更不一样的是if(m=!false),这是我以前碰到的!
我今天考过了SCJP,努力吧!
chrischen79 2002-11-21
  • 打赏
  • 举报
回复
不可能吧?异灵现象???
寒~~~

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧