if(boo=false)与if(boo==false)?

JackJia 2002-09-02 10:06:10
程序段:
boolean boo = true;
if(boo=false) System.out.println("false");
else System.out.println("true");
输出true,为何可以if(boo=false)?
...全文
1320 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
guo_com 2002-09-03
  • 打赏
  • 举报
回复
在IF语句中,不管boo=false还是boo=true,编译器无法解析该语句,返回的结果都是false,所以始终输出else的内容;如果是==则编译器能解析,执行相应支路语句.
weny666 2002-09-03
  • 打赏
  • 举报
回复
如果你用的是java,很可能是高速缓存没有清空导致,编译前,先把前面编译好的类文件删除,再重新编译、运行,就应该可以了!
weny666 2002-09-03
  • 打赏
  • 举报
回复 1
if(boo=false)与if(boo==false)?

第一种写法是先执行boo=false赋值语句,然后再判断boo的值,相当于:

boo=false; ---> if(boo)

显然,该语句永远返回false(相当于if(false))

后者if(boo==false)是判断boo的值是否为false,是正确的写法!

换句话说,“=”是赋值符号,“==”是等于符号!
p_tangnj 2002-09-03
  • 打赏
  • 举报
回复
在if,while等命令后的()中是允许赋值的,
boo = true 其实和 while((line=readLine(lineArr,ai))!=null){}中line 的 line=readLine(lineArr,ai)一样,是赋值语句。

我认为编译时是将值先付给boo然后用boo的值作为判断的条件

就像楼上playgb(溯缘)说得那样

if(boo=false)
相当于
boo = false;
if (boo)
{}
qqf 2002-09-03
  • 打赏
  • 举报
回复
各位!都说是先赋值后判断,不过小弟“以身试法”不成功!希望大家继续努力!搞懂这个东东,我看现在大家好像好迷糊了,和小弟一样,希望大家一起去找答案。人多力量大嘛!呵呵呵……
qqf 2002-09-03
  • 打赏
  • 举报
回复
楼上的弟兄说得不对,小弟试一试。
  无论你是
“boolean boo = true;
if(boo=false) System.out.println("false");
else System.out.println("true");”
这样还是  
boolean boo = true;
if(boo=true) System.out.println("false");
else System.out.println("true");

输出的结果都是“true”!换一句话也就是说,无论你如何判断,都将输入同一个结果。具体的什么小弟就不知道了!希望与大家共同研究讨论这个问题。小弟非常之关注和!!!!!!
  小弟有一大胆的猜测不知道通通不,不过努力的想总是不会错的吧!
  可能是表达式有错,系统直接认为是错误!或者是当系统运行到
if (boo=false) System.out.println("false");
只给boo赋值为false,再判断,不过话又说回来了,给boo赋值后为假才打印出"true",不过我给boo赋值为真也不打印出"false"。这是为什么?小弟现在迷茫了,兄弟们救救我,HELP ME!!!
  ???????????????????????????????????????????????????????????????????????
playgb 2002-09-03
  • 打赏
  • 举报
回复
if(boo=false)
是先赋值后判断
相当于
boo = false;
if (boo)
{}
Jim_OU 2002-09-03
  • 打赏
  • 举报
回复
不好意思,测试后原来是先附值后判断
Jim_OU 2002-09-03
  • 打赏
  • 举报
回复
执行完上面的程序boo就变为flase了,先判断后附值
Jim_OU 2002-09-03
  • 打赏
  • 举报
回复
我倒觉得应该这样理解:
if(boo=false)
就相当于:
if(boo){}
boo=false;
因为先前boo已经等于true了所以if(boo)肯定成立拉,就是说if(boo=false)这个成立
iamsoloist 2002-09-03
  • 打赏
  • 举报
回复
不以这样写吧,这样的话boo的值不就变了吗?
如果别的地方也用这个标志呢?
wjmmml 2002-09-03
  • 打赏
  • 举报
回复
对,楼上的说的有道理
boo=false 就等于false
boo=true 就等于 true。
hjt3328 2002-09-03
  • 打赏
  • 举报
回复
同意楼上的,if(boo=false) 就等同于if(false);
teaky2002 2002-09-03
  • 打赏
  • 举报
回复
这个是程序的执行顺序问题,if(boo=false) 是先把false赋给boo变量,然后再判断,这个赋值的结果是false,所以就执行else的部分,就这么简单。
CatLuDn 2002-09-03
  • 打赏
  • 举报
回复
这其实也可以从运算符优先级来讨论的,关于运算符优先级和表达式的组合运算过程大家就去看看资料吧.
teddybear_xb 2002-09-03
  • 打赏
  • 举报
回复
楼上的 if (boo=true) 和 if(boo==false)这两者是完全的两个概念问题,并不等同!
前者是在赋值等同于if (true)而后者是在进行boolean类型的比较等同于if (true==false),显然true==false的结果是false
,所以间接等同于if (false)
CatLuDn 2002-09-03
  • 打赏
  • 举报
回复
各位想想吧!
CatLuDn 2002-09-03
  • 打赏
  • 举报
回复
同志们何必那么测试这样来吧,就可以知道 boo = false;表达式的值为false,而boo = true;表达式的值为true.
boolean boo = false;
System.out.println(boo = true);
System.out.println(boo = false);
System.out.println(boo == true);
System.out.println(boo == false);
输出是
ture
false
false
true
其实这是java中为了免除象c++中的if(x = ...)这样的错误而实行的一种机制,每个表达式都有其值,如:"int = 2;"的值为2.
所以你甚至可以写如下的式子:
int i =2;
i = i * (i = 3);
weny666 2002-09-03
  • 打赏
  • 举报
回复
我的结果和楼上的完全一样
agree jimok(Jim)
weny666 2002-09-03
  • 打赏
  • 举报
回复
if(statement) 在java中是完全可以的!
当然,该语句我还进行了实验,语法上没错误!而且我试验的结果也是正常的!
问题应该是高速缓存或编译时编译器监测错误,没有将原来的.class文件覆盖,按我上面说的方法应该可以!
加载更多回复(4)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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