Wiemy, że zmienna lokalna musi zostać zainicjowana, aby mogła być użyta w konstrukcji if-else-if. Jako przykład poniższy kod nie zostanie skompilowany.Dlaczego zmienna lokalna jest inicjowana w konstruktach if-else, ale nie w konstrukcjach if-else-if?
public class Test {
public static void main (String...args){
double price= 11;
String model ;
if (price>10)
{model ="smartphone";}
else if (price<=11)
{model="not smart phone";}
System.out.println(model);
}
}
Ale jeśli zmienisz else if (price<=11)
do else
lub zainicjować zmienną lokalną do pewnego modelu String losowej wartości, kod zostanie skompilowany pomyślnie. Moje pytanie w tym przypadku brzmi "dlaczego?"
Teraz, to było pytanie z książki i wyjaśnienie było.
„lokalny model zmienna jest zadeklarowana tylko nie zainicjowany Inicjalizacja zmiennej modelu jest umieszczony wewnątrz if i else-if Jeśli zainicjujesz zmienną wewnątrz konstruktu if lub else-if, kompilator nie może mieć pewności, czy warunki te zostaną ustawione na true, co spowoduje brak inicjalizacji zmiennej lokalnej. "
Nawet po wyjaśnienia, ja nadal nie rozumiem dwóch rzeczy,
- Nie jestem pewien, dlaczego zmienna modelu pomyli kompilator, ponieważ podwójna cena jest 11 niezależnie od tego, jaki model jest.
- W jaki sposób magicznie zainicjować zmienną lokalną, gdy umieścisz jeszcze na końcu?
'Cena' jest zmienną i jako taka może mieć wartość" zmienna ". Tak więc w twoim kodzie nie ma gwarancji, że albo 'if' lub' else if' zostanie wprowadzone do –
ostatniego warunku if może zawieść 11.5 i ponieważ nie ma innego modelu, który nie zostanie zainicjowany, –
@Joop for 11,5, z pewnością spełniony jest pierwszy warunek. Jednak na NaN może się nie udać. –