0
    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 & Rasmussen 书中发表的运算符优先级

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

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

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

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

4

8 回答 8

3

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

(true && false) || true 

这是

false || true -> true
于 2012-08-17T17:30:27.210 回答
0

你的解释是关闭的。如果我们遵循这本书,您的 if 语句可以重写并保持相同的含义

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

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

于 2012-08-17T17:30:28.660 回答
0
  1. true && false=>false
  2. false || true=>true

因此没有问题,因为 and 语句首先执行,然后是 or 语句。代码的预期结果是yes

于 2012-08-17T17:30:30.207 回答
0

你的解释是错误的

true && false -> false

false || true -> true

预计打印“​​是”

于 2012-08-17T17:30:38.213 回答
0

if(true && false || true)==> if(false || true)==> 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
于 2012-08-17T17:31:23.540 回答
0

&& 首先被评估......但是“或”的一侧|| 为真,因此整个表达式的计算结果为“真”

if(true&&false||true)
{
    System.out.println("yes");
}
于 2012-08-17T18:04:14.773 回答
0

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

所以第一部分:

 true&&false // evaluates to false

然后你有:

 false || true

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

于 2012-08-17T17:36:32.260 回答
0

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

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

如果&&你有优先权,( true || (true && false) )这将是真的,所以会打印“是”。

如果||优先,您将拥有( (true || true) && false)这将是错误的,并会打印出“不”。

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

于 2012-08-17T17:38:39.073 回答