我的問題可能是非常基本的,但我認爲它值得去問。我有以下代碼:&&(AND)and || (或)在IF陳述
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
其中partialHits
是一個HashMap。如果第一個陳述是真的會發生什麼? Java仍會檢查第二條語句嗎?因爲爲了使第一條語句成立,HashMap不應該包含給定的鍵,所以如果第二條語句被選中,我會得到NullPointerException
。
那麼簡單的話,如果我們有以下代碼
if(a && b)
if(a || b)
將Java的檢查b
如果a
是在第一種情況下假,如果a
在第二種情況下是真的嗎?
是否存在按位比較以便您可以評估這兩個表達式?即如果(str!= null | str.isEmpty())? (當然這不是一個實際的例子,實際上它很愚蠢,但你明白了) – Kezzer
只要表達式沒有副作用,短路語義在邏輯上就等同於完整的評估。也就是說,如果A是真的,你知道A || B是真的,而不必評估B.只有當表達式有副作用時,纔會有所作爲。至於其他操作符,您可以使用'*'和'+'作爲邏輯'和'和'或'; ((A1→0)×(B1→0))== 1「,((A1→0)+(B1→0))> 0。你甚至可以做'xor':'((A?1:0)+(B?1:0))== 1'。 – outis
@Kezzer:是真的按位比較嗎?我認爲它是一個布爾邏輯運算符。它與'按位'(整數)運算符不同,儘管它們具有相同的符號... –