由於第一部分的計算結果爲false,此代碼是否不會評估if語句的零部分?如果是這樣,所有Java IDE中的所有情況都適用?或者某些編譯器會拋出異常?這個if語句會引發異常還是忽略它?
int n = 0;
int x = 5;
if (n != 0 && x/n > 100) {
System.out.println(" s1");
} else {
System.out.println("s2");
}
由於第一部分的計算結果爲false,此代碼是否不會評估if語句的零部分?如果是這樣,所有Java IDE中的所有情況都適用?或者某些編譯器會拋出異常?這個if語句會引發異常還是忽略它?
int n = 0;
int x = 5;
if (n != 0 && x/n > 100) {
System.out.println(" s1");
} else {
System.out.println("s2");
}
假設我們包括SoP的進口,並放入系統行內的靜態主寫的,不會有異常拋出,並s2
將被打印。 X/0
將永遠不會在您的代碼中進行評估,因爲& &首先檢查左表達式,因此它永遠不會拋出任何東西。
我不同意。如果'int n'被聲明爲字段而不是本地參數,並且這部分代碼由多個線程執行,並且其中一個線程將'n'賦值爲'0',則可能拋出異常。 –
「IF」。確切地說,我只是基於我給出的代碼的答案。在任何Java環境中,代碼行都不會拋出異常。假設當然給出了SoP的輸入。我不記得我在談論多線程 – Mekap
我們不能確定這一點。否則,代碼將被髮布到方法中。我們可以承擔任何事情,所以這個職位也可以封閉太寬。 –
的條件和操作& &就像&(§15.22.2),但評估其右邊的操作數只有在其左側操作數的值是true。
所以不,你不會得到一個例外。
很明顯,這假定你有一個單線程或線程安全的環境 - 如果你將可見性問題引入混合,那麼這是任何人的猜測。
所有(正確的)Java編譯器和JVM都會以同樣的方式運行。至於它會做什麼...爲什麼不試一試,親自看看? – yshavit
Java爲布爾運算使用[short circuit evaluation](http://en.wikipedia.org/wiki/Short-circuit_evaluation)。只評估所需的數量。這是由[JLS 15.23](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.23)授權的**。 –
糟糕,關閉這個錯誤的原因。讓我試着找到一個更好的... – yshavit