0
votes

Pourquoi System.out.Print (opérateur ternaire) imprimé float en sortie?

Je traversais certains questions d'entrevue Java MCQ où j'ai trouvé cet extrait de code, dont je n'ai pas compris la sortie, bien que son seul code de 2 lignes. xxx

sortie est de 9,0 Je n'ai pas compris pourquoi ce n'est pas 9?


2 commentaires

Java est une langue statistique typée, ce qui signifie entre autres choses que toute expression a un type. Quel type mais un point de flotte numéro un pourrait-il avoir ici? Comme 9.9 est une valeur de résultat possible de cette expression, un type de numéro entier est incapable de le faire.


essayez system.out.println ((int) (((A <8)? 9.9: 9.0));


3 Réponses :


1
votes

Le type de retour de l'opérateur ternaire est déterminé en fonction de règles assez compliquées: Spécification de la langue Java . Plus précisément, dans votre cas:

Sinon, la promotion numérique binaire (§ 5.6.2) est appliquée aux types d'opérande et le type de l'expression conditionnelle est le type promçu des deuxième et troisième opérandes.

Donc, dans votre cas, vous obtenez le type de retour double.


0 commentaires

3
votes

Opérateur ternaire a le type de retour défini avant le calcul de la valeur. Donc, si l'opérateur peut renvoyer à la fois du flotteur et d'INT, les deux valeurs sont prélevées sur le flotteur. Votre réponse est de cette manière:

int a = 2;
float b = 4.3f;
float c = a + b;


0 commentaires

1
votes

Parce que vous ne les coulez pas tous. Vous venez de casser le second résultat à int.

mais n'oubliez pas le premier résultat est flottant afin que toute la structure doit être de même type. Vous devez tous les jeter en tant que même type comme l'int ou le flotteur. xxx

sortie: xxx


0 commentaires