和&&的优先权和|| java中的运算符

时间:2012-08-17 17:27:29

标签: java operator-keyword

    Postfix operators [] . (parameters) expression++ expression--
Unary prefix operators ++expression --expression +expression -expression ~ !
Unary prefix creation and cast new (type)
Multiplicative * / %
Additive + -
Shift << >> >>>
Relational < <= > >= instanceof
Equality == !=
Bitwise/logical AND &
Bitwise/logical XOR ^
Bitwise/logical OR |
Conditional AND &&    //here
Conditional OR ||     //here   
Conditional ?:
Assignment = += -= *= /= %= <<= >>= >>>= &= ^= |=

这是在kalid A Mughal&amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;拉斯穆森的书

根据本书&&的优先级高于||,但以下代码

  if(true&&false||true)
{
    System.out.println("yes");
}

此代码打印"yes"。表示首先执行"||"

这本书错了吗?或者我的解释错了。

8 个答案:

答案 0 :(得分:3)

我猜你的解释是错误的。由于&&具有更高的优先级,因此评估顺序为

(true && false) || true 

false || true -> true

答案 1 :(得分:0)

你的解释是关闭的。如果我们按照本书的说法,你的if语句可以重写并保持相同的含义

if( (true && false) || true)

现在很容易看出这确实评估为真,因此打印出“是”。

答案 2 :(得分:0)

  1. true && false =&gt; false
  2. false || true =&gt; true
  3. 因此,没有问题,因为和语句首先执行or语句。代码的预期结果是yes

答案 3 :(得分:0)

你的解释是错误的

true && false -> false

false || true -> true

预计会打印“是”

答案 4 :(得分:0)

if(true && false || true) ==&gt; if(false || true) ==&gt; if(true)


和真相表:

 F & F = F
 T & F = F
 F & T = F
 T & T = T

或真相表:

 F | F = F
 T | F = T
 F | T = T
 T | T = T

答案 5 :(得分:0)

请仔细查看,因为这些是短路 AND和OR

所以第一部分:

 true&&false // evaluates to false

然后你有:

 false || true

第一部分是假的,但是第二部分可能是真的(事实上它是),因此它移动检查第二部分,看到它是真的,因此返回true

答案 6 :(得分:0)

如果您更改了表示,您可以更清楚地看到它,例如:

if(true || true && false) {
    System.out.println("yes");
} else {
    System.out.println("no");
}

如果&&优先( true || (true && false) ),那么这将是真的,因此将打印“是”。

如果||成为( (true || true) && false),您将拥有&&这将是假的,并打印出“否。

如果您运行上面的代码,您会看到结果为“是”,因此{{1}}具有优先权。

答案 7 :(得分:0)

&amp;&amp;首先评估...但是“或”||的一侧是的,因此整体表达式的评估结果为“true”

if(true&&false||true)
{
    System.out.println("yes");
}