[Oracle, Программирование, Java, Промышленное программирование] Унарные операторы в Java

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
25-Окт-2020 18:31
Уже завтра в OTUS скоро стартует новая профессиональная программа по подготовке к сертификации Oracle Java Programmer (OCAJP). Предлагаем вам посмотреть запись бесплатного Demo-урока «Типы данных Java: Идентификаторы и примитивы» и продолжаем публиковать серию статей Владислава Родина — руководителя группы разработки, преподавателя в МФТИ и foxminded.

Введение
Сертификация OCA (Oracle Certified Associate Java SE8 Programmer) предлагает ряд необычных заданий, проверяющих глубокое понимание принципов работы языка программирования Java. Целый блок посвящен выражениям, циклам и операторам. Про последние мы сегодня и поговорим.
Приоритет операторов
Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false — унарный, a + b — бинарный, а? : — является единственным оператором, принимающим на вход три аргумента.
Первое, что необходимо помнить, это приоритет выполнения операторов:
  • Пост-унарные операторы: exception++ и exception--
  • Пре-унарные операторы: ++exception и --exception
  • Остальные унарные операторы: +, -, !
  • Умножение, деление, взятие остатка: *, /, %
  • Сложение и вычитание: +, -
  • Операторы битового сдвига: <<, >>, >>>
  • Операторы сравнения: <, >, <=, >=, instanceof
  • Операторы равенства-неравенства: ==, !=
  • Логические операторы: &, |, ^
  • Short-circuit логические операторы: &&, ||
  • Тернарный оператор: boolean expression? expression1: expres-
    sion2
  • Операторы присваивания: =, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>=

Работа с унарными операторами
Про бинарные операторы мы говорили в прошлый раз. Сегодня обсудим унарные операторы, что следует из названия статьи. На экзамене могут предлагать достаточно сложные выражения для вычисления которых необходимо помнить порядок их выполнения.
Операторы смены знака и логической инверсии
Оператор логической инверсии ! применяется только к переменным типа boolean и превращает значение из true в false и наоборот. Например:
boolean x = false;
System.out.println(x); // false
x = !x;
System.out.println(x); // true

Оператор смены знака - применяется только к числам и меняет знак на противоположный:
double x = 1.21;
System.out.println(x); // 1.21
x = -x;
System.out.println(x); // -1.21
x = -x;
System.out.println(x); // 1.21

Java в отличии от того же C четко разделяет целочисленные типы данных и boolean, в связи с чем применение оператора смены знака к boolean либо же применение оператора логической инверсии приводят к ошибкам компиляции:
int x = !5; // DOES NOT COMPILE
boolean y = -true; // DOES NOT COMPILE
boolean z = !0; // DOES NOT COMPILE

Операторы инкремента и декремента
Операторы инкремента ++ и декремента -- применяются к целочисленным переменным и обладают двумя вариациям: post-инкремент (декремент) и pre-инкремент (декремент), в коде i++ (i--) и ++i (--i) соответственно. Разница между вариациями в том, что ++i увеличивает переменную и возвращает новое значение, а i++ возвращает старое значение, а только затем увеличивает переменную. Разницу более наглядно можно увидеть в таком куске кода:
int counter = 0;
System.out.println(counter); // Outputs 0
System.out.println(++counter); // Outputs 1
System.out.println(counter); // Outputs 1
System.out.println(counter--); // Outputs 1
System.out.println(counter); // Outputs 0

На экзамене могут предлагаться различные хитрые задания, где таких операторов вагон и маленькая тележка. Например, может быть предложено такое задание:
Что будет выведено в результате выполнения данной программы?
int x = 3;
int y = ++x * 5 / x-- + --x;
System.out.println("x is " + x);
System.out.println("y is " + y);

Проблема заключается в том, что x меняется несколько раз в одной строке.
Для решения таких задач можно разбирать выражение слева направо, подставляя в выражение то, что возвращают операторы, и фиксируя отдельно значение изменяемой переменной. Например, вот так:
int y = 4 * 5 / x-- + --x; // x assigned value of 4
int y = 4 * 5 / 4 + --x; // x assigned value of 3
int y = 4 * 5 / 4 + 2; // x assigned value of 2

Как видите, применяются все обозначенные выше правила применения операторов. В результате выведено будет следующее:
x is 2
y is 7

Читать ещё:


оригинал
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_oracle, #_programmirovanie (Программирование), #_java, #_promyshlennoe_programmirovanie (Промышленное программирование), #_java, #_oracle, #_certified, #_associate, #_se, #_programmer, #_operatory (операторы), #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
)
, #_oracle, #_programmirovanie (
Программирование
)
, #_java, #_promyshlennoe_programmirovanie (
Промышленное программирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 18:33
Часовой пояс: UTC + 5