Рубрики

Java числовое продвижение в условном выражении

Условный оператор ? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений должно быть оценено.

Итак, мы ожидаем выражения,

Object o1 = true ? new Integer(4) : new Float(2.0));

быть таким же, как,

Object o2;
if (true)
    o2 = new Integer(4);
else
    o2 = new Float(2.0);

Но результат выполнения кода дает неожиданный результат.

// Java-программа, чтобы продемонстрировать, что мы должны быть осторожны
// при замене условного оператора на if else или вице
// наоборот

import java.io.*;

class GFG

{

    public static void main (String[] args)

    {

        // Выражение 1 (используя?:)

        // Автоматическое продвижение в условном выражении

        Object o1 = true ? new Integer(4) : new Float(2.0);

        System.out.println(o1);

  

        // Выражение 2 (используя if-else)

        // Нет продвижения в выражении if else

        Object o2;

        if (true)

            o2 = new Integer(4);

        else

            o2 = new Float(2.0);

        System.out.println(o2);

    }

}

Выход:

4.0
4

В соответствии с разделом 15.25 Спецификации языка Java , условный оператор будет реализовывать продвижение числовых типов, если есть два разных типа как 2-й и 3-й операнд. Правила конвертации определены в Binary Numeric Promotion . Следовательно, согласно приведенным правилам, если один из операндов имеет тип double, другой преобразуется в double и, следовательно, 4 становится 4.0.

Принимая во внимание, что конструкция if / else не выполняет числовое продвижение и, следовательно, ведет себя как ожидалось.

Эта статья предоставлена Дипаком Гаргом . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Java числовое продвижение в условном выражении

0.00 (0%) 0 votes