Почему System.out.print (троичный оператор) печатает с плавающей точкой в ​​выводе? - PullRequest
0 голосов
/ 12 марта 2020

Я проходил через несколько java вопросов интервью MCQ, где я нашел этот фрагмент кода, из которого я не понял вывод, хотя это всего лишь двухстрочный код.

int a = 8;
System.out.println(((a<8)? 9.9 : (int)9));

Вывод 9.0 Я не понял, почему это не 9?

Ответы [ 3 ]

3 голосов
/ 12 марта 2020

Тернарный оператор имеет тип возвращаемого значения, который определяется перед вычислением значения. Таким образом, если оператор может вернуть как float, так и int, то оба значения преобразуются в float. Ваш ответ приводится следующим образом:

(int)9 -> (int)9 -> (float)9.

Другая ситуация: если вы добавите float и int, вы получите float

int a = 2;
float b = 4.3f;
float c = a + b;
1 голос
/ 12 марта 2020

Потому что вы не разыгрываете их всех. вы просто приводите второй результат к int.

Но не забывайте, что первый результат - это float, поэтому все структуры должны быть одного типа. Вам нужно разыграть их всех одинакового типа, например int или float.

int a = 8;
System.out.println(""+ (int)( (a<8)? 9.9 :  9));

output:

9
1 голос
/ 12 марта 2020

Тип возврата тернарного оператора определяется по довольно сложным правилам: Java Спецификация языка . В частности, в вашем случае:

В противном случае двоичные числа c продвижение (§5.6.2) применяются к типам операндов, а тип условного выражения является продвинутым типом второго и третий операнд.

Так что в вашем случае вы получаете тип возврата double.

...