论坛首页 入门技术论坛

&&运算符和||运算符的优先级问题

浏览 5990 次
该帖已经被评为新手帖
作者 正文
   发表时间: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.

具体先算哪个,应该是虚拟机决定的,跟优先级好像没关系.是这样嘛?




原来是我自己理解错了...真小白.
看来思维只是在一线之间啊.
谢了.
0 请登录后投票
   发表时间:2008-05-29  
还是有点东西没想清楚..

脑子里面总是有些东西
很模糊很模糊.
伸手去抓.它又消失了...

我之前贴的那份代码还有点想不通`

当你改变&&和||运算符的位置
或者改变check()函数中所返回的true和false

程序的输出结果总是会有些让人摸不着头脑
是我想得太多了吗?
0 请登录后投票
   发表时间: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)就可以计算&&操作的表达式的值???


0 请登录后投票
   发表时间:2008-05-30  
优先级与执行顺序无关
0 请登录后投票
   发表时间:2008-05-30  
ddandyy 写道
优先级与执行顺序无关


我也觉得是你所说的这样~``

但可能是一时半会理解不了吧..希望可以想通

谢了..
0 请登录后投票
   发表时间: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进行运算
0 请登录后投票
   发表时间:2008-06-01  
谢谢指导..终于弄清楚了.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics