1. ホーム
  2. java

[解決済み] switchケースでの変数のスコープ [重複]。

2022-11-14 10:02:54

質問

switchの場合のスコープの仕組みがよくわからないと思うのですが。

なぜ最初のコードはコンパイルされず、2番目のコードはコンパイルされるのか、誰か私に説明することができますか?

コード1:

 int key = 2;
 switch (key) {
 case 1:
      String str = "1";
      return str;
 case 2:
      String str = "2"; // duplicate declaration of "str" according to Eclipse.
      return str;
 }

コード2:

 int key = 2;
 if (key == 1) {
      String str = "1";
      return str;
 } else if (key == 2) {
      String str = "2";
      return str;
 }

変数 "str"のスコープがケース1内に収まらないのはなぜですか?

ケース1の宣言をスキップすると、変数 "str"は宣言されないのですが...。

どのように解決するのですか?

他の人が言っていることを繰り返しますが、各変数のスコープが case 節の変数のスコープは switch 文に対応します。ただし、以下のように中括弧を使ってさらに入れ子のスコープを作ることができます。

int key = 2;
switch (key) {
case 1: {
    String str = "1";
    return str;
  }
case 2: {
    String str = "2";
    return str;
  }
}

という変数があるため、このコードは正常にコンパイルされます。 str という変数が各 case 節はそれ自身のスコープにある。