簡體   English   中英

&&和||的優先級 Java中的運算符

[英]precedence of && and || operators in java

    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" 表示首先執行"||"

這本書錯了嗎? 或我的解釋錯誤。

我想你的解釋是錯誤的。 由於&&優先級較高,因此評估順序為

(true && false) || true 

這是

false || true -> true

您的解釋不對了。 如果我們遵循本書,則您的if語句可以重寫並保持相同的含義

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

現在,很容易看到這確實是正確的,因此打印出“是”。

  1. true && false => false
  2. false || true false || true => true

這樣就沒有問題,因為先執行and語句,然后再執行or語句。 該代碼的預期結果是yes

您的解釋是錯誤的

true && false -> false

false || true -> true

預期打印“是”

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

仔細看,因為它們是短路 AND和OR

所以第一部分:

 true&&false // evaluates to false

然后您有:

 false || true

第一部分為假,但第二部分可能為真(實際上是),因此它檢查第二部分,看是否為真,因此返回true

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

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

如果&&優先( true || (true && false) ) true,因此將打印“ yes”。

如果|| 優先您將擁有( (true || true) && false)它將為false並打印出“否。

如果運行上面的代碼,您將看到結果為“是”,因此&&具有優先權。

首先對&&求值...,但對“或” ||的一側進行求值。 是真實的,因此整體表達式的計算結果為“真實”

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM