developer tip

스위치 케이스의 변수 범위

copycodes 2020. 9. 5. 10:05
반응형

스위치 케이스의 변수 범위


이 질문에 이미 답변이 있습니다.

스위치 케이스에서 스코프가 어떻게 작동하는지 이해할 수 없다고 생각합니다.

누군가가 첫 번째 코드가 컴파일되지 않고 두 번째 코드가 컴파일되지 않는 이유를 설명 할 수 있습니까?

코드 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"의 범위가 Case 1에 포함되지 않는 이유는 무엇입니까?

case 1 선언을 건너 뛰면 "str"변수는 선언되지 않습니다.


다른 사람들의 말을 반복하겠습니다. 각 case절의 변수 범위 는 전체 switch문장에 해당 합니다. 그러나 다음과 같이 중괄호를 사용하여 추가 중첩 범위를 만들 수 있습니다.

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

이제 strcase절에 이름이 지정된 변수 가 자체 범위 있으므로 결과 코드가 성공적으로 컴파일 됩니다.


변수의 범위는 전체 switch문 (포함 된 경우 모든 케이스 및 기본값)입니다.

다음은 몇 가지 다른 옵션입니다 ...

옵션 1:

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

옵션 2 :

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

각각 case이 if / else 블록과 같이 자체 로컬 범위가있는 블록 이라고 가정하는 것 같습니다 . 그렇지 않습니다.

이 개념상의 실수를 바로 잡는 것이 중요합니다. 그렇지 않으면 break내부 를 잊는 빈번한 함정에 빠지게되기 때문입니다 .case


나는 그것이 타당한 질문이라고 생각하며 사건 진술에 대한 범위 가정은 피할 수 없습니다. 자바 작성자가 이것을 올바르지 않게 만들었 기 때문에 자신을 조정합니다.

e.g. if statement by default take first line in its scope than what's wrong with cases where the end of case is explicitly closed by break statement. Hence the declaration in case 1: should not be available in case 2 and it has parallel scope but not nested.


Several cases can be executed in one switch statement. So..


The scope of a variable exists between the braces of the switch and if statements. In example Code 1 the switch braces enclose both declarations of the variables which will cause the compiler to error as the name to variable binding will have already been made.

In the other example it is ok because both variables are declared within their own braces (scope).


In the first case the scope of the String declaration is within the switch statement therefore it is shown as duplicate while in the second the string is enclosed within curly braces which limits the scope within the if/else conditions,therefore it is not an error in the second case.

참고URL : https://stackoverflow.com/questions/3894119/variables-scope-in-a-switch-case

반응형