锁定老帖子 主题:&&运算符和||运算符的优先级问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-29
whiller 写道 ----------------
应该先计算后面的check(2)&&check(3)&&check(4)的值~` -------------- 理解偏了吧? &&优先级比||高,只能说明: check(1)||check(2)&&check(3)&&check(4) 等价于 check(1)|| ( check(2)&&check(3)&&check(4) ) 但并不是说先计算 check(2)&&check(3)&&check(4) 再算check(1)||XXX. 具体先算哪个,应该是虚拟机决定的,跟优先级好像没关系.是这样嘛? 原来是我自己理解错了...真小白. 看来思维只是在一线之间啊. 谢了. |
|
返回顶楼 | |
发表时间:2008-05-29
还是有点东西没想清楚..
脑子里面总是有些东西 很模糊很模糊. 伸手去抓.它又消失了... 我之前贴的那份代码还有点想不通` 当你改变&&和||运算符的位置 或者改变check()函数中所返回的true和false 程序的输出结果总是会有些让人摸不着头脑 是我想得太多了吗? |
|
返回顶楼 | |
发表时间:2008-05-30
whiller 写道 ----------------
应该先计算后面的check(2)&&check(3)&&check(4)的值~` -------------- 理解偏了吧? &&优先级比||高,只能说明: check(1)||check(2)&&check(3)&&check(4) 等价于 check(1)|| ( check(2)&&check(3)&&check(4) ) 但并不是说先计算 check(2)&&check(3)&&check(4) 再算check(1)||XXX. 具体先算哪个,应该是虚拟机决定的,跟优先级好像没关系.是这样嘛? 如果说是先计算哪个方法是JVM的事.那也说不通啊 因为&&的优先级要高于|| 那就是它比较的时候就应该先比较&&前面的表达式 既然要比较&&前面的表达式 那就一定要执行这个表达式 应该会输出check(2)的值 难道虚拟机都不用执行check(2)就可以计算&&操作的表达式的值??? |
|
返回顶楼 | |
发表时间:2008-05-30
优先级与执行顺序无关
|
|
返回顶楼 | |
发表时间:2008-05-30
ddandyy 写道 优先级与执行顺序无关
我也觉得是你所说的这样~`` 但可能是一时半会理解不了吧..希望可以想通 谢了.. |
|
返回顶楼 | |
发表时间:2008-05-30
你的那句话 是被看成了
flag=( check(1) || ( check(2)&&check(3)&&check(4) ) ) 问题是 &&的优先级高就不代表 他会先运行 || 的右边 而是说会把右边的当作一个值来看 从整个的判断顺序来说 是先大后小的 会先判断最外面的 || || 的顺序还是从左到右的 所以只走了1就停下来了 至于你后来的 flag=( ( check(1)&&check(2)&&check(3) ) || check(4) ) 也是同理 也是先运行的 || 他的左边是 () 所以 就先运行了 里面的最左边的 这个例子里 优先级的意思是 会把 ( check(2)&&check(3)&&check(4) ) 当做一个值来处理 也就是必须要当中全为true才会 为true 同理 比如 1 + 2 + ( 3 * 4 ) 不是会 先把 3*4 运算完才 1 + 2 + 12 而是先 1+2 然后 3 + () 发现有()后 先把3放在那 运行()里面的 得出最后的值之后 才和前面的3进行运算 |
|
返回顶楼 | |
发表时间:2008-06-01
谢谢指导..终于弄清楚了.
|
|
返回顶楼 | |