pgsandstrom
pgsandstrom

Reputation: 14399

When are references declared in a switch statement?

To my surprise this code works fine:

int i = 2;
switch(i) {
case 1:
    String myString = "foo";
    break;
case 2:
    myString = "poo";
    System.out.println(myString);
}

But the String reference should never be declared? Could it be that all variables under every case always are declared no matter what, or how is this resolved?

Upvotes: 7

Views: 107

Answers (2)

Gerco Dries
Gerco Dries

Reputation: 6712

The scope of the myString declaration is the switch block (where the { character is). If you were to write it like this, the declaration would be per-case:

int i = 2;
switch(i) {
    case 1: {
        String myString = "foo";
        break;
    }

    case 2: {
        String myString = "poo";
        System.out.println(myString);
    }
}

Upvotes: 3

Noon Silk
Noon Silk

Reputation: 55082

Well, it's about brackets (i.e. scope).

It's better practice, arguably, to write your statements like so:

int i = 2;
switch(i) {
    case 1: {
        String myString = "foo";
        break;
    }
    case 2: {
        myString = "poo";
        System.out.println(myString);
    }
}

(I'm not near a Java compiler right now, but that shouldn't compile).

Upvotes: 7

Related Questions