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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 希筱诺 中级黑马   /  2014-9-15 14:06  /  3563 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
本帖最后由 希筱诺 于 2014-9-16 02:10 编辑

按大家的解释我懂,但是我还是有疑问,就是运算不是要按优先级吗,&&和||排后面,不是应该先算再比较最后逻辑判断吗?求真正原因???????

最佳答案

查看完整内容

是应该先算再比较最后判断。 但是这里,后++和后--的意思是执行完当前一条语句后,再自增自减。所以对第一个(x--==1),是先执行x==1,后执行x+=1;这里如果写(++x==1),就是先执行x+=1,后执行x==1。 所以按你的要求应该写作(++x==1&&++y==1||++z==1)或者((x+=1)==1&&(y+=1)==1||(z+=1)==1) 至于为什么是这样,++、--设计的初衷,是基于以下的情况考虑: 一、 语句1:定义变量x; 语句2:对x进行操作; 语句3;x+=1或者x-=1 ...

5 个回复

倒序浏览
是应该先算再比较最后判断。
但是这里,后++和后--的意思是执行完当前一条语句后,再自增自减。所以对第一个(x--==1),是先执行x==1,后执行x+=1;这里如果写(++x==1),就是先执行x+=1,后执行x==1。
所以按你的要求应该写作(++x==1&&++y==1||++z==1)或者((x+=1)==1&&(y+=1)==1||(z+=1)==1)
至于为什么是这样,++、--设计的初衷,是基于以下的情况考虑:
一、
语句1:定义变量x;
语句2:对x进行操作;
语句3;x+=1或者x-=1
二、
语句1:定义变量x;
语句2:x+=1或者x-=1;
语句3:对x进行操作;

为了优化以上两种情况,就设计了++,--运算符,所以他并不是计算,而应该把它拆成两条语句理解。这样理解的话,下面的几种就不会混了:
++x--==5;
a+++b;
a+++--b;
回复 使用道具 举报
本帖最后由 ooEye 于 2014-9-15 16:06 编辑

对于&&和||这两个预算符而言,并不是两边的表达式一定会运算,例如:A&&B,如果表达式A为false,那么A&&B就是false,而B表达式是不会运行的;对于C||D,如果C为true,那么C||D为true,D不运算;此外,对于这种复合表达式,要理清楚是否是右结合的
另外,你的x y z 表示的整数变量吧,在java中是不可以的,这一点与C/C++ 不同,上面例子中的A/B/C/D结果只能是boolean类型的
回复 使用道具 举报
ifinver 发表于 2014-9-15 15:18
是应该先算再比较最后判断。
但是这里,后++和后--的意思是执行完当前一条语句后,再自增自减。所以对第一 ...

哦对了 还有2楼所说的短路求值问题,逻辑运算语句左边得出真值时,后边的逻辑运算就跳过了。
回复 使用道具 举报
终于找到点能看懂的知识点了~
回复 使用道具 举报

这个可以看懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马