Moje pytanie może być bardzo proste, ale nadal myślę, że warto o to zapytać. Mam następujący kod:&& (AND) i || (OR) w instrukcjach 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));
}
gdzie partialHits
jest HashMap. Co się stanie, jeśli pierwsze zdanie będzie prawdziwe? Czy Java nadal sprawdzi drugie zdanie? Ponieważ aby pierwsza instrukcja była prawdziwa, HashMap nie powinna zawierać podanego klucza, więc jeśli zaznaczona jest druga instrukcja, otrzymam NullPointerException
.
Tak więc w prostych słowach, jeśli mamy następujący kod
if(a && b)
if(a || b)
by sprawdzić Java b
jeśli a
jest fałszywe w pierwszym przypadku i jeśli a
prawda w drugim przypadku?
Czy istnieją porównania bitowe, aby móc ocenić oba wyrażenia? tj. if (str! = null | str.isEmpty())? (Oczywiście nie jest to praktyczny przykład, w gruncie rzeczy jest głupie, ale masz pomysł) – Kezzer
Dopóki wyrażenia nie mają skutków ubocznych, semantyka zwarcia jest logicznie równoważna z całkowitą oceną. Oznacza to, że jeśli A jest prawdziwe, to wiesz, że A || B jest prawdziwe bez konieczności oceny B. Jedynym momentem, w którym robi różnicę, jest to, czy wyrażenie ma skutki uboczne. Podobnie jak w przypadku innych operatorów, możesz użyć '*' i '+' jako logicznych 'i' oraz' lub'; '((A? 1: 0) * (B? 1: 0)) == 1',' ((A? 1: 0) + (B? 1: 0))> 0'. Możesz nawet zrobić 'xor':' ((A? 1: 0) + (B? 1: 0)) == 1'. – outis
@Kezzer: czy to naprawdę porównanie bitowe? Myślę, że jest to operator 'boolean' (logiczny). Jest inny niż operator 'bitwise' (integer), pomimo tego samego symbolu ... –