Odpowiedź jest true|| true
nie został pokryty.
Dzieje się tak, ponieważ po tym, jak JVM wykryje pierwszy warunek, który ma być prawdziwy, nie uruchomi on drugiego warunku (jest zoptymalizowany), co oznacza, że część kodu nigdy nie jest uruchamiana.
Jak powiedział Maroun, 3 z 4 gałęzi pozwolą warunkowi przejść. Jeśli nadal martwisz się o zasięg kodu, możesz zastąpić warunkowe jako &&
zamiast ||
.
(x || y)
jest taki sam jak (!(!x && !y))
, a to pozwoli ci przetestować wszystkie warunki, ponieważ teraz są tylko trzy gałęzie.
Oryginalna forma warunkowego jest często postrzegana w sprawozdaniach osłaniających:
if (obj == null || obj.hasError())
{
throw new RuntimeException();
}
To nigdy nie będzie można sprawdzić, czy obj
jest null
i ma błąd, ponieważ będzie ona rzucać wyjątek pustego wskaźnika.
Jeśli zasięg kod jest ważny, a potem po prostu korzystać z tego formularza:
if (!(obj != null && !obj.hasError()))
{
throw new RuntimeException();
}
Pytanie brzmi, skąd mam wiedzieć, które z tych oddziałów nie były przestrzegane? Wiem na pewno, że nie jest to przypadek fałszywy/fałszywy, ponieważ przypadek "else" jest w niektórych przypadkach wykonywany. – tor
Czy nie powinien to być prawdziwy || prawdziwy przypadek, który nie jest objęty? – Jason
Po prostu potknąłem się o to pytanie - musiałem wrócić do zapamiętania starych cyfrowej tablicy prawdy i "nie przejmuj się" warunkami. –