Основные операторы Java
Все операторы Java можно разделить на четыре группы: арифметические, логические, побитовые и сравнения. Рассмотрим последовательно каждую группу операторов. Начнем с арифметических. Эти операторы перечислены в табл. 1.2
Таблица 1.2. Арифметические операторы Java
Эти операторы имеют некоторые особенности. В первую очередь обращаем внимание на оператор деления /. Если операндами являются целые числа, в качестве значения возвращается результат целочисленного деления. Рассмотрим последовательность команд: int a=5,b=2; double x=a/b; В данном примере переменная x получает значение 2.0, а не 2.5, как можно было бы ожидать. Дело в том, что сначала вычисляется выражение a/b. Поскольку операнды целочисленные, выполняется целочисленное деление. И только после этого полученное значение преобразуется к формату double и присваивается переменной x. Для того чтобы при целочисленных операндах выполнялось обычное деление, перед выражением с оператором деления указывается в круглых скобках идентификатор типа double (или float). Например, так: int a=5,b=2; double x=(double)a/b; Теперь значение переменной x равно 2.5. В Java, как и в С++, есть группа упрощенных арифметических операторов с присваиванием. Если op — один из операторов сложения, умножения, деления и вычисления остатка, то упрощенная форма этого оператора с присваиванием имеет вид op=. Это тоже бинарный оператор, как и оператор op, а команда вида x op=y является эквивалентом команды x=x op y. Еще два исключительно полезных унарных оператора — операторы инкремента (++) и декремента (--). Действие оператора декремента сводится к увеличению на единицу значения операнда, а оператор декремента на единицу уменьшает операнд. Другими словами, команда x++ эквивалентна команде x=x+1, а команда x-- эквивалентна команде x=x-1. У операторов инкремента и декремента есть не только представленная здесь постфиксная форма (оператор следует после операнда: x++ или x--), но и префиксная (оператор располагается перед операндом: ++x или --x). С точки зрения действия на операнд нет разницы в том, префиксная или постфиксная формы оператора использованы. Однако если выражение с оператором инкремента или декремента является частью более сложного выражения, различие в префиксной и постфиксной формах операторов инкремента и декремента существует. Если использована префиксная форма оператора, сначала изменяется значение операнда, а уже после этого вычисляется выражение. Если использована постфиксная форма оператора, сначала вычисляется выражение, а затем изменяется значение операнда. Рассмотрим небольшой пример: int n,m; n=10; m=n++; В этом случае после выполнения команд переменная n будет иметь значение 11, а переменная m — значение 10. На момент выполнения команды m=n++ значение переменной n равно 10. Поскольку в команде m=n++ использована постфиксная форма оператора инкремента, то сначала выполняется присваивание значения переменной m, а после этого значение переменной n увеличивается на единицу. Иной результат выполнения следующих команд: int n,m; n=10; m=++n; Обе переменные (n и m) в этом случае имеют значение 11. Поскольку в команде m=++n использована префиксная форма инкремента, сначала на единицу увеличивается значение переменной n, а после этого значение переменной n присваивается переменной m. Следующую группу образуют логические операторы. Операндами логических операторов являются переменные и литералы типа boolean. Логические операторы Java перечислены в табл. 1.3.
Таблица 1.3. Логические операторы Java
Логические операторы обычно используются в качестве условий в условных операторах и операторах цикла. В табл. 1.4 перечислены операторы сравнения, используемые в Java. Таблица 1.4. Операторы сравнения Java
Операторы сравнения обычно используются совместно с логическими операторами. Для понимания принципов работы поразрядных операторов необходимо иметь хотя бы элементарные познания о двоичном представлении чисел. Напомним читателю некоторые основные моменты. В двоичном представлении позиционная запись числа содержит нули и единицы. Старший бит (самый первый слева) определяет знак числа. Для положительных чисел старший бит равен нулю, для отрицательных — единице. Перевод из двоичной системы счисления положительного числа с позиционной записью bnbn-1...b2b1b0 (bi могут принимать значения 0 или 1, старший бит для положительных чисел bn = 0) в десятичную выполняется так: b020 + b121 + b222 +... + bn-12n-1 + bn2n . Для перевода отрицательного двоичного числа в десятичное представление производится побитовое инвертирование кода (об операции побитового инвертирования — см. далее), полученное двоичное число переводится в десятичную систему, к нему прибавляется единица (и добавляется знак минус). Для перевода отрицательного числа из десятичной в двоичную систему от модуля числа отнимают единицу, результат переводят в бинарный код и затем этот код инвертируют. Умножение числа на два эквивалентно сдвигу влево на один бит позиционной записи числа (с заполнением первого бита нулем). Побитовые операторы Java описаны в табл. 1.5.
Таблица 1.5. Побитовые операторы Java
За редким исключением, побитовые операции используются в случаях, когда необходимо оптимизировать программу в отношении быстродействия. Помимо перечисленных операторов, в Java есть единственный тернарный оператор (у оператора три операнда). Формально оператор обозначается как ?:. Синтаксис вызова этого оператора следующий: условие?значение_1:значение_2 Первым операндом указывается условие — выражение, возвращающее в качестве значения логическое значение. Если значение выражения-условия равно true, в качестве значения тернарным оператором возвращается значение_1. Если значением выражения-условия является false, тернарным оператором в качестве значения возвращается значение_2. Несколько замечаний по поводу оператора присваивания (оператор =). В Java оператор присваивания возвращает значение. Команда вида x=y выполняется следующим образом. Сначала вычисляется выражение y, после чего это выражение приводится к типу переменной x и затем записывается в эту переменную. Благодаря тому, что, в отличие от других операторов с равными приоритетами, присваивание выполняется справа налево, в Java допустимыми являются команды вида x=y=z. В этом случае значение переменной z присваивается сначала переменной y, а затем значение переменной y присваивается переменной x. Еще одно замечание касается упрощенных форм операторов с присваиванием, то есть операторов вида op=. Хотя утверждалось, что команда вида A op=B эквивалента команде A=A op B, это не совсем так. При выполнении команды вида A op=B сначала вычисляется выражение A op B, затем полученное значение приводится к типу переменной A и только после этого присваивается переменной A. Поскольку приведение к типу переменной A выполняется, фактически, явно, а в команде A=A op B приведение типов неявное, может проявиться разница в использовании полной и упрощенной форм команд присваивания. Рассмотрим простой пример: byte a=10,b=20; // Правильно: a+=20; // Неправильно: a=a+b; В данном случае команда a+=20 является корректной, а команда a=a+b — нет. В первом случае литерал 20 типа int «насильственно» приводится к типу byte в силу особенностей оператора +=. Во втором случае результат вычисления выражения a+b автоматически расширяется до типа int, а автоматическое приведение типа int к типу byte запрещено. Напоследок приведем в табл. 1.6 данные о приоритете различных операторов в Java.
Таблица 1.6. Приоритеты операторов в Java
Операторы равных приоритетов (за исключением присваивания) выполняются слева направо. В случаях когда возникают сомнения в приоритете операторов и последовательности вычисления выражений, рекомендуется использовать круглые скобки.
Примеры программ Далее рассмотрим некоторые задачи, которые иллюстрируют возможности Java и специфику синтаксиса этого языка.
Популярное: Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (400)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |