Questao de controle de fluxo

[code]public class TesteSwitch {

static int z = 150;
static byte x = (byte) z;

static public void main(String args[]) {

    if (args.length > 1)
        x = 100;

    z = 50;

    switch (x) {

        case (byte) z:
        System.out.println("50");
        break;
        case (byte) 100:
        System.out.println("100");
        break;
        case (int) (byte) 150: {
        System.out.print("1");
        System.out.print("50 ");
        }
        default:
        System.out.println("nenhum");
    }
}

}[/code]

Qual sera a saida para o codigo? sendo executado: java TesteSwitch 10

a. 50
b. 100
c. 150
d. nenhum
e. 150 nenhum
f. erro de compilacao

Vai gerar um erro de compilação.
Eu acho que deve ser pelo fato de não poder colocar uma variavel no Case.

estou certo disto?

public class TesteSwitch {

static int z = 150;
static byte x = (byte) z;

static public void main(String args[]) {

    if (args.length > 1)
        x = 100;

    z = 50;

    switch (x) {

        case (byte) z:
        System.out.println("50");
        break;
        case (byte) 100:
        System.out.println("100");
        break;
        case (int) (byte) 150: {
        System.out.print("1");
        System.out.print("50 ");
        }
        default:
        System.out.println("nenhum");
    }
}

}[/code]

Qual sera a saida para o codigo? sendo executado: java TesteSwitch 10

a. 50
b. 100
c. 150
d. nenhum
e. 150 nenhum
f. erro de compilacao[/quote]

Acho q nenhum

[quote]Vai gerar um erro de compilação.
Eu acho que deve ser pelo fato de não poder colocar uma variavel no Case.
[/quote]

Tu podes colocar uma variável no case desde que ela tenha sido declarada como uma constante.

Eu acredito que dê erro de compuilação

case (byte) z: 

eu acho que o erro estaria aqui tbm…

Ficou meio estranha essa frase… Pq se vc declarar uma variável como constante ela não será mais variável… :lol:

Mas o erro de compilação é esse mesmo, só pode colocar no case uma constante.

Agora se jogar um final lá na declaração… tb vai dar erro… pq o case (byte) z: ficará igual ao case (int) (byte) 150: e não pode ter dois cases iguais…

Na verdade o que ocorre é um erro na compilação do código.
Uma vez que o switch - case não aceita variável como comparação , logo declarando z como constante final, você está marcando aquela literal no caso o valor 150 como z, isso só diz que 150 tem um nome, então

[quote=“Código”] case (int) (byte) 150:
[/quote]
teria uma ambiguidade de nomes, na verdade teriamos uma duplicacao de comparacao no switch - case, é como se estivessemos escrevendo:

Lembrando que switch - case só aceita comparação de literais inteiras e de chars…