Outra "Pegadinha"

7 respostas
H

Olá a todos,
Bem resolvi também postar uma questão que me confundiu um pouco.

What results from attempting to compile and run the following code?

public class Conditional{
     public static void main(String args[]){
        int x=4;
        System.out.println("Valor : "+ ((x>4)? 99.99 : 9));
         }
      }

Qual seria a resposta:

  1. Valor: 99.99
  2. Valor: 9
  3. Valor: 9.0
  4. Ocorre um erro de compilação na linha 5

Gostaria que alguem comentasse essa questão se possível heheh
Abraços,

7 Respostas

thiagorani

Eu acho que o resultado seria Valor: 9.

Creio eu que neste caso foi usado um operador ternario, ou seja, um if/else.
Como foi atribuido 4 ao atributo x, a condição é testada.
Se x fosse > que 4 entao valor receberia 99.99, mas como x = 4 o Valor será 9, que é atribuição do else.

Será que viajei?

[]´s

H

Rapaz!!!
Bem de primeira eu também achava que a resposta fosse 9 mas está errado, como a outra alternativa e double, os tipos de resposta devem ser compatíveis, então o valor 9 (int ) passa a ser double 9.0, a resposta deve ser 9.0. Acho que é por ai, se estiver errado por favor alguem me diga , valeu!

Bruno_Cardoso

Pois, realmente também pensei que fosse dar 9 mas agora que testei vi que realmente dá 9.0, não sabia que funcionava assim, agora já sei :lol:

PEACE!

thiagorani

Correta a sua resposta.

Rodei aqui é o resultado é Valor = 9.0

Ocorreu um casting automatico de int para double?

[]´s

duardor

Po esa me pegou tb!!!
Isso acontece por causa do ternario???

H

Bem, a conversão não tem nada a ver com a operação ternária, o problema consiste no fato que temos dois tipos primitivos diferentes, um int e outro double, com isso para que possa ser possível a operação as variáveis devem ser do mesmo tipo, então o int passa a ser double (numeric promotion), acho que é esse o motivo da conversão, essa conversão pode acntecer em todas as operações, não somente na ternária. Espero que seja isso mesmo, qualquer coisa me corrijam.
Abraços, :lol:

Elvis.The.Pelvis

Tem a ver com a operação ternária sim.

<boolean> ? <expr1> : <expr2>

<expr1> e <expr2> devem ter o mesmo tipo, logo, a conversão é feita autimaticamente para o tipo mais “wide”.

Lembrem-se que os tipos devem ser compatíveis. se <expr1> for boolean, <expr2> também deve ser pois não se pode converter nenhum tipo de dado primitivo num boolean.

Criado 7 de março de 2003
Ultima resposta 10 de mar. de 2003
Respostas 7
Participantes 5