簡體   English   中英

Java中的布爾表達式求值順序?

[英]Boolean expression order of evaluation in Java?

假設我有以下表達式

String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}

Eclipse 警告我myString在布爾表達式的第二個短語中可能為空。 但是,我知道有些編譯器會在第一個條件失敗時完全退出布爾表達式。 Java 是這樣嗎? 還是不保證評估順序?

但是,我知道有些編譯器會在第一個條件失敗時完全退出布爾表達式。 Java 是這樣嗎?

是的,這就是所謂的短路評估。像&&||這樣的運算符是執行此類操作的運算符。

還是不保證評估順序?

不,評估順序是有保證的(從左到右)

Java 應該從左到右評估您的語句。 它使用一種稱為短路評估的機制來防止在第一個條件為假時測試第二個、第三個和第 n 個條件。

因此,如果您的表達式為myContainer != null && myContainer.Contains(myObject)並且myContainer為 null,則不會評估第二個條件myContainer.Contains(myObject)

編輯:正如其他人提到的,特別是 Java 確實具有布爾條件的短路和非短路運算符。 使用&&會觸發短路評估,而&不會。

詹姆斯和埃德是正確的。 如果您遇到這樣一種情況,即無論先前的失敗條件如何,您都希望對所有表達式進行求值,則可以使用非短路布爾運算符&

是的,Java 以這種方式對 if 語句進行惰性求值。 如果 myString==null,則不會評估 if 語句的其余部分

暫無
暫無

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

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