Duvida

9 respostas
F

Ola alguém sabe me dizer se entendi direito a seguinte questao;
caso nao esteja usando un enum vc pode usar no swicth variáveis e valores que podem ser promovidos automaticamente(implicitamente convertidos)a um tipo int serão aceitos.
Esta certo? e se sim pq posso converter entao abaixo?

class Text{
    public static void main(String args[]){
      int Int=10;
      final byte b=21;
       
                     switch(Int){
                     case b://a conversao implicita nao deveria falhar?
                    }

      Byte By=34;
     final short sh=98;
   
               switch(By){
                     case sh://sem problemas sh recebe um wrapper menor
                     
                 }
}

Obrigado galera pela atencao!!!

9 Respostas

diego2005

Não entendi muito bem a sua dúvida, mas um byte pode ser promovido a um int.

T+

F

diego2005:
Não entendi muito bem a sua dúvida, mas um byte pode ser promovido a um int.

T+

desculpas me expliquei mal no exemplo que dei nao entendi pq um int é promovido para um byte!

F

ok para me explicar melhor ainda queria saber se a conversao que o compilador faz é da expressao swicth para case ou o inverso??
valeu brigado pela atencao diego

diego2005

fabioEM:
diego2005:
Não entendi muito bem a sua dúvida, mas um byte pode ser promovido a um int.

T+

desculpas me expliquei mal no exemplo que dei nao entendi pq um int é promovido para um byte!

É o contrário, um byte que é promovido à um int.

T+

F
diego2005:
fabioEM:
diego2005:
Não entendi muito bem a sua dúvida, mas um byte pode ser promovido a um int.

T+

desculpas me expliquei mal no exemplo que dei nao entendi pq um int é promovido para um byte!

É o contrário, um byte que é promovido à um int.

T+

valeu cara mas eu ainda to confuso veja o que acontece agora se como tu falaste é um byte que é promovido isso deveria dar certo nao??
class Main{

 
  
  public static void main(String[] args) {
      final int y=9;
      final Short sh=9;
      int Int=Short.valueOf("11");//sem problemas,entao pq?logo abaixo
   switch(y){
       case sh://mas se fiseres o contrario vai dar certo!
       
   } 
  

}
}
diego2005

O problema desse código é que você declarou como Short e não short. Short é um objeto e short um tipo primitivo. Faz o teste ai pra vc ver…

T+

F
diego2005:
O problema desse código é que você declarou como Short e não short. Short é um objeto e short um tipo primitivo. Faz o teste ai pra vc ver.. T+
beleza cara ,tudo bem mas como é que ele pode aceitar o contrario entao?veja embaixo eu coloquei um objeto Short na expressao switch mas uma classe wrapper Short nao deveria receber um int.Ou estou errado?
final int y=9;
      final Short sh=9;
      int Int=Short.valueOf("11");
   switch(sh){//um Short pode receber um int ??
       case y:
       
   }

Obrigado ai!!

diego2005

O compilador aceita pq você está usando um valor constante, que não vai mudar, então ele sabe que 9 mesmo sendo do tipo int pode ser atribuído a um valor short. Dá uma olhada nos exemplos a seguir:

class Main {
     
    public static void main(String[] args) {   
        final int y = 127;
        final Byte sh = 9;
      
        switch(sh) {
            case y: // ok, pq y é um valor constante, e 127 cabe em um byte
        }     
    }
}
class Main {
     
    public static void main(String[] args) {   
        final int y = 128;
        final Byte sh = 9;
      
        switch(sh) {
            case y: // erro, apesar de y ser uma constante, o valor 128 não cabe em um byte
        }     
    }

Entendeu agora???

T+

F
diego2005:
O compilador aceita pq você está usando um valor constante, que não vai mudar, então ele sabe que 9 mesmo sendo do tipo int pode ser atribuído a um valor short. Dá uma olhada nos exemplos a seguir:
class Main {
     
    public static void main(String[] args) {   
        final int y = 127;
        final Byte sh = 9;
      
        switch(sh) {
            case y: // ok, pq y é um valor constante, e 127 cabe em um byte
        }     
    }
}
class Main {
     
    public static void main(String[] args) {   
        final int y = 128;
        final Byte sh = 9;
      
        switch(sh) {
            case y: // erro, apesar de y ser uma constante, o valor 128 não cabe em um byte
        }     
    }

Entendeu agora???

T+

ok valeu cara agora sim !!

Criado 27 de outubro de 2007
Ultima resposta 27 de out. de 2007
Respostas 9
Participantes 2