La mia domanda potrebbe essere molto semplice, ma credo che valga la pena di chiedere. Ho il seguente codice:&& (AND) e || (OR) nelle dichiarazioni 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));
}
dove partialHits
è un HashMap. Cosa succederà se la prima affermazione è vera? Java controllerà ancora la seconda affermazione? Perché nell'ordine in cui la prima affermazione è vera, la HashMap non deve contenere la chiave data, quindi se la seconda istruzione è selezionata, otterrò NullPointerException
.
Quindi, in parole semplici, se abbiamo il seguente codice
if(a && b)
if(a || b)
controllerei Java b
se a
è falsa nel primo caso, e se è vero a
nel secondo caso?
Esistono confronti bit a bit, quindi è possibile valutare entrambe le espressioni? cioè if (str! = null | str.isEmpty())? (naturalmente questo non è un esempio pratico, in effetti è stupido, ma l'idea è) – Kezzer
Finché le espressioni non hanno effetti collaterali, la semantica di cortocircuito è logicamente equivalente alla valutazione completa. Cioè, se A è vero, sai A || B è vero senza dover valutare B. L'unica volta che farà la differenza è se un'espressione ha effetti collaterali. Come per gli altri operatori, puoi usare '*' e '+' come logici 'and' e' or'; '((A? 1: 0) * (B? 1: 0)) == 1',' ((A? 1: 0) + (B? 1: 0))> 0'. Puoi anche fare 'xor':' ((A? 1: 0) + (B? 1: 0)) == 1'. – outis
@Kezzer: è davvero un confronto bit a bit? Penso che sia un operatore (logico) 'booleano'. È diverso dall'operatore 'bitwise' (intero), nonostante abbia lo stesso simbolo ... –