de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 Azimuth
Azimuth
Question

&& (AND) i || (OR) w wyrażeniach IF

Mam następujący kod:

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 stwierdzenie będzie prawdziwe? Czy Java nadal będzie sprawdzać drugie stwierdzenie? Ponieważ aby pierwsze stwierdzenie było prawdziwe, HashMap nie powinna zawierać podanego klucza, więc jeśli drugie stwierdzenie zostanie sprawdzone, otrzymam wyjątek NullPointerException.
Tak więc w prostych słowach, jeśli mamy następujący kod

if(a && b)  
if(a || b)

czy Java sprawdziłaby b jeśli a jest fałszywe w pierwszym przypadku i jeśli a jest prawdziwe w drugim przypadku?

125 2009-11-25T09:50:12+00:00 3
 Amr
Amr
Edytowane pytanie 30. marca 2018 в 3:11
Programowanie
java
if-statement
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Peter  van der Heijden
Peter van der Heijden
25. listopada 2009 в 9:53
2009-11-25T09:53:14+00:00
Więcej
Źródło
Edytuj
#9737520

Nie, to nie będzie sprawdzane. Takie zachowanie nazywane jest short-circuit evaluation i jest cechą wielu języków, w tym Javy.

Peter  van der Heijden
Peter van der Heijden
Edytowana odpowiedź 25. listopada 2009 в 10:04
26
0
Romain Linsolas
Romain Linsolas
25. listopada 2009 в 9:53
2009-11-25T09:53:18+00:00
Więcej
Źródło
Edytuj
#9737522

Nie, jeśli a jest prawdziwe (w teście lub), b nie będzie testowane, ponieważ wynik testu zawsze będzie prawdziwy, niezależnie od wartości wyrażenia b.

Zrób prosty test:

if (true || ((String) null).equals("foobar")) {
    ...
}

nie będzie nie rzucał wyjątku NullPointerException!

6
0
 abyx
abyx
25. listopada 2009 в 9:53
2009-11-25T09:53:42+00:00
Więcej
Źródło
Edytuj
#9737523

Nie, Java zrobi zwarcie i przestanie oceniać, gdy będzie znała wynik.

4
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
DE
EL
ES
FR
HU
ID
IT
JA
KO
LT
NL
PL
PT
RO
RU
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem