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 book で公開されている演算子の優先順位です。

この本によると、次のコード&&よりも優先順位が高い||

  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(true && false || true)==> if(false || true)==> if(true)


AND真理値表:

 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

これらは短絡ANDおよびORであるため、注意深く見てください

最初の部分:

 true&&false // evaluates to false

次に、次のものがあります。

 false || true

最初の部分は false ですが、2 番目の部分は true である可能性があります (実際にはそうです)。したがって、2 番目の部分をチェックするために移動し、それが true であることを確認して、true を返します。

于 2012-08-17T17:36:32.260 に答える
0

あなたの解釈はずれています。この本に従えば、if文を書き直して同じ意味を維持することができます

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

これで、これが実際に true と評価され、「yes」と出力されることが非常に簡単にわかります。

于 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 || true && false) {
    System.out.println("yes");
} else {
    System.out.println("no");
}

&&優先される場合( true || (true && false) )、これは true になるため、「yes」と出力されます。

||優先する場合( (true || true) && false)、これは偽になり、「いいえ」と出力されます。

上記のコードを実行すると、結果が「yes」であり、優先順位があることがわかります&&

于 2012-08-17T17:38:39.073 に答える
0

&& が最初に評価されます...ただし、「or」の片側 || は true であるため、式全体が「true」と評価されます

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