簡體   English   中英

Java表達式中子表達式的評估順序

[英]order of evaluation of subexpressions in a Java expression

我有以下代碼片段:

int x=2,y=3;
if ( (y == x++) | (x < ++y) )
// rest of code

我知道在C ++中,你被教導不要依賴子表達式的評估順序,因為它根本不保證是任何順序。 所以這段代碼會出錯,並且條件中表達式產生的布爾值不能保證為真(例如,y可以在第一次相等性測試中計算之前遞增)。 由於我在Java認證書中閱讀了這段代碼,我認為Java不是這種情況。我的意思是,我保證Java中的評估順序總是從左到右嗎? 所以上面的表達式總是應該是真的。

是的,它保證從左到右執行 - 或者至少,就像它一樣。 這在JLS 15.7中定義:

Java編程語言保證運算符的操作數似乎以特定的評估順序進行評估,即從左到右。

|的第一個操作數 運算符將評估3 == 2,並產生false,但第二個操作數將評估3 <4,並產生true。

話雖如此,我肯定會避免需要仔細閱讀的代碼......

暫無
暫無

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

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