Hvorfor virker initialisering af en streng i en if-sætning anderledes end i en switch-sætning?
Det skyldes, at du ikke har angivet, hvilken sæson der skal være i standardtilfældet. Hvad sker der, når måneden ikke er inden for 1-12? season
vil ikke blive initialiseret.
Hvis du kun forventer 1-12 som månedsinput, kan du overveje at smide en Exception
i default:
default:
throw new IllegalArgumentException("Invalid month");
I dit første eksempel er der ingen sti gennem koden, der ikke kan tildele en værdi til 'sæson'. I det andet eksempel tildeler standardcasen ikke en værdi, så den sidste udskrift ("maj er...") kan udføres med en ikke-initialiseret værdi.
I din if
/else
kode, er der en forsikring om, at variablen season
vil få en værdi. Det vil sige else
erklæring.
Din switch
kode har det ikke. Se, hvad der vil ske med variablen season
hvis den angivne værdi for måned er 13
-- den får ikke en værdi og forbliver uinitialiseret.