まず、 public class P1{ public static void main(String[] args){ int n = 1; switch(n){ case 0: System.out.println("あ"); break; case 1: System.out.println("い"); break; case 2: System.out.println("う"); break; default: System.out.println("え"); } } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{ public static void main(String[] args){ int n = 1; String s; switch(n){ case 0: s="あ"; break; case 1: s="い"; break; case 2: s="う"; break; default: s="え"; } System.out.println(s); } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。 System.out.print(s); ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。
↧