Операторы сравнения java
Операторы сравнения
Многие операторы сравнения известны нам из математики:
- Больше/меньше: a > b , a .
- Больше/меньше или равно: a >= b , a .
- Равно: a == b . Обратите внимание, для сравнения используется двойной знак равенства = . Один знак равенства a = b означал бы присваивание.
- Не равно. В математике обозначается символом ≠ . В JavaScript записывается как знак равенства с предшествующим ему восклицательным знаком: a != b .
Результат сравнения имеет логический тип
Операторы сравнения, как и другие операторы, возвращают значение. Это значение имеет логический тип.
- true – означает «да», «верно», «истина».
- false – означает «нет», «неверно», «ложь».
Результат сравнения можно присвоить переменной, как и любое значение:
Сравнение строк
Чтобы определить, что одна строка больше другой, JavaScript использует «алфавитный» или «лексикографический» порядок.
Другими словами, строки сравниваются посимвольно.
Алгоритм сравнения двух строк довольно прост:
- Сначала сравниваются первые символы строк.
- Если первый символ первой строки больше (меньше), чем первый символ второй, то первая строка больше (меньше) второй.
- Если первые символы равны, то таким же образом сравниваются уже вторые символы строк.
- Сравнение продолжается, пока не закончится одна из строк.
- Если обе строки заканчиваются одновременно, то они равны. Иначе, большей считается более длинная строка.
В примерах выше сравнение ‘Я’ > ‘А’ завершится на первом шаге, тогда как строки «Кот» и «Код» будут сравниваться посимвольно:
- К равна К .
- о равна о .
- т больше чем д . На этом сравнение заканчивается. Первая строка больше.
Приведённый выше алгоритм сравнения похож на алгоритм, используемый в словарях и телефонных книгах, но между ними есть и различия.
Например, в JavaScript имеет значение регистр символов. Заглавная буква «A» не равна строчной «a» . Какая же из них больше? Строчная «a» . Почему? Потому что строчные буквы имеют больший код во внутренней таблице кодирования, которую использует JavaScript (Unicode). Мы ещё поговорим о внутреннем представлении строк и его влиянии в главе Строки.
Сравнение разных типов
При сравнении значений разных типов JavaScript приводит каждое из них к числу.
Логическое значение true становится 1 , а false – 0 .
Возможна следующая ситуация:
- Два значения равны.
- Одно из них true как логическое значение, другое – false .
С точки зрения JavaScript, результат ожидаем. Равенство преобразует значения, используя числовое преобразование, поэтому «0» становится 0 . В то время как явное преобразование с помощью Boolean использует другой набор правил.
Строгое сравнение
Использование обычного сравнения == может вызывать проблемы. Например, оно не отличает 0 от false :
Та же проблема с пустой строкой:
Это происходит из-за того, что операнды разных типов преобразуются оператором == к числу. В итоге, и пустая строка, и false становятся нулём.
Как же тогда отличать 0 от false ?
Оператор строгого равенства === проверяет равенство без приведения типов.
Другими словами, если a и b имеют разные типы, то проверка a === b немедленно возвращает false без попытки их преобразования.
Ещё есть оператор строгого неравенства !== , аналогичный != .
Оператор строгого равенства дольше писать, но он делает код более очевидным и оставляет меньше мест для ошибок.
Сравнение с null и undefined
Поведение null и undefined при сравнении с другими значениями – особое:
При строгом равенстве ===
Эти значения различны, так как различны их типы.
Эти значения равны друг другу и не равны никаким другим значениям. Это специальное правило языка.
Значения null/undefined преобразуются к числам: null становится 0 , а undefined – NaN .
Посмотрим, какие забавные вещи случаются, когда мы применяем эти правила. И, что более важно, как избежать ошибок при их использовании.
Странный результат сравнения null и 0
Сравним null с нулём:
С точки зрения математики это странно. Результат последнего сравнения говорит о том, что » null больше или равно нулю», тогда результат одного из сравнений выше должен быть true , но они оба ложны.
Причина в том, что нестрогое равенство и сравнения > = работают по-разному. Сравнения преобразуют null в число, рассматривая его как 0 . Поэтому выражение (3) null >= 0 истинно, а null > 0 ложно.
С другой стороны, для нестрогого равенства == значений undefined и null действует особое правило: эти значения ни к чему не приводятся, они равны друг другу и не равны ничему другому. Поэтому (2) null == 0 ложно.
Несравнимое значение undefined
Значение undefined несравнимо с другими значениями:
Почему же сравнение undefined с нулём всегда ложно?
На это есть следующие причины:
- Сравнения (1) и (2) возвращают false , потому что undefined преобразуется в NaN , а NaN – это специальное числовое значение, которое возвращает false при любых сравнениях.
- Нестрогое равенство (3) возвращает false , потому что undefined равно только null и ничему больше.
Как избежать проблем
Зачем мы рассмотрели все эти примеры? Должны ли мы постоянно помнить обо всех этих особенностях? Не обязательно. Со временем все они станут вам знакомы, но можно избежать проблем, если следовать простому правилу.
Просто относитесь к любому сравнению с undefined/null , кроме строгого равенства === , с осторожностью.
Не используйте сравнения >= > с переменными, которые могут принимать значения null/undefined , если вы не уверены в том, что делаете. Если переменная может принимать эти значения, то добавьте для них отдельные проверки.
9. Java — Основные операторы языка
Java предоставляет богатый набор операторов для управления переменными. Все операторы Java можно разделить на следующие группы:
- арифметические операторы;
- операторы сравнения;
- побитовые операторы;
- логические операторы;
- операторы присваивания;
- прочие операторы.
Содержание
Арифметические операторы
Арифметические операторы — используются в математических выражениях таким же образом, как они используются в алгебре. Предположим, целая переменная A равна 10, а переменная B равна 20. В следующей таблице перечислены арифметические операторы в Java:
Оператор | Описание | Пример |
+ | Складывает значения по обе стороны от оператора | A + B даст 30 |
— | Вычитает правый операнд из левого операнда | A — B даст -10 |
* | Умножает значения по обе стороны от оператора | A * B даст 200 |
/ | Оператор деления делит левый операнд на правый операнд | B / A даст 2 |
% | Делит левый операнд на правый операнд и возвращает остаток | B % A даст 0 |
++ | Инкремент — увеличивает значение операнда на 1 | B++ даст 21 |
— | Декремент — уменьшает значение операнда на 1 | B— даст 19 |
Пример
Следующий простой пример показывает программно арифметические операторы. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Это произведет следующий результат:
Операторы сравнения
Есть следующие операторы сравнения, поддерживаемые на языке Java. Предположим, переменная A равна 10, а переменная B равна 20. В следующей таблице перечислены реляционные операторы или операторы сравнения в Java:
Оператор | Описание | Пример |
== | Проверяет, равны или нет значения двух операндов, если да, то условие становится истинным | (A == B) — не верны |
!= | Проверяет, равны или нет значения двух операндов, если значения не равны, то условие становится истинным | (A != B) — значение истинна |
> | Проверяет, является ли значение левого операнда больше, чем значение правого операнда, если да, то условие становится истинным | (A > B) — не верны |
= | Проверяет, является ли значение левого операнда больше или равно значению правого операнда, если да, то условие становится истинным | (A >= B) — значение не верны |
> (сдвиг вправо) | Бинарный оператор сдвига вправо. Значение правых операндов перемещается вправо на количество бит, заданных левых операндом. | A >> 2 даст 15, который является 1111 |
>>> (нулевой сдвиг вправо) | Нулевой оператор сдвига вправо. Значение левых операндов перемещается вправо на количество бит, заданных правым операндом, а сдвинутые значения заполняются нулями. | A >>> 2 даст 15, который является 0000 1111 |
Пример
Следующий простой пример показывает, программно побитовые операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Будет получен следующий результат:
Логические операторы
Предположим, логическая переменная A имеет значение true, а переменная B хранит false. В следующей таблице перечислены логические операторы в Java:
Оператор | Описание | Пример |
&& | Называется логический оператор «И». Если оба операнда являются не равны нулю, то условие становится истинным | (A && B) — значение false |
|| | Называется логический оператор «ИЛИ». Если любой из двух операндов не равен нулю, то условие становится истинным | (A || B) — значение true |
! | Называется логический оператор «НЕ». Использование меняет логическое состояние своего операнда. Если условие имеет значение true, то оператор логического «НЕ» будет делать false | !(A && B) — значение true |
Пример
Следующий простой пример показывает, программно логические операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Это произведет следующий результат:
Операторы присваивания
Существуют следующие операторы присваивания, поддерживаемые языком Java:
Оператор | Описание | Пример |
= | Простой оператор присваивания, присваивает значения из правой стороны операндов к левому операнду | C = A + B, присвоит значение A + B в C |
+= | Оператор присваивания «Добавления», он присваивает левому операнду значения правого | C += A, эквивалентно C = C + A |
-= | Оператор присваивания «Вычитания», он вычитает из правого операнда левый операнд | C -= A, эквивалентно C = C — A |
*= | Оператор присваивания «Умножение», он умножает правый операнд на левый операнд | C * = A эквивалентно C = C * A |
/= | Оператор присваивания «Деление», он делит левый операнд на правый операнд | C /= A эквивалентно C = C / A |
%= | Оператор присваивания «Модуль», он принимает модуль, с помощью двух операндов и присваивает его результат левому операнду | C %= A, эквивалентно C = C % A |
>= | Оператор присваивания «Сдвиг вправо» | C >>= 2, это как C = C >> 2 |
&= | Оператор присваивания побитового «И» («AND») | C &= 2, это как C = C & 2 |
^= | Оператор присваивания побитового исключающего «ИЛИ» («XOR») | C ^= 2, это как C = C ^ 2 |
|= | Оператор присваивания побитового «ИЛИ» («OR») | C |= 2, это как C = C | 2 |
Пример
Следующий простой пример показывает, программно логические операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Будет получен следующий результат:
Прочие операторы
Есть несколько других операторов, поддерживаемых языком Java.
Тернарный оператор или условный оператор (?:)
Тернарный оператор — оператор, который состоит из трех операндов и используется для оценки выражений типа boolean. Тернарный оператор в Java также известен как условный оператор. Этот. Цель тернарного оператора или условного оператора заключается в том, чтобы решить, какое значение должно быть присвоено переменной. Оператор записывается в виде:
Пример
Ниже приведен пример:
Будет получен следующий результат:
Оператор instanceof
Оператор instanceof — проверяет, является ли объект определенного типа (типа класса или типа интерфейса) и используется только для переменных ссылочного объекта. Оператор instanceof записывается в виде:
Примеры
Если переменная ссылочного объекта в левой части оператора проходит проверку для класса/типа интерфейса на правой стороне, результатом будет значение true. Ниже приведен пример и описание оператора instanceof:
Будет получен следующий результат:
Этот оператор по-прежнему будет возвращать значение true, если сравниваемый объект является совместимым с типом на право назначения. Ниже приводится еще один пример:
Будет получен следующий результат:
Приоритет операторов в Java
Приоритет операторов определяет группирование терминов в выражении. Это влияет как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например оператор умножения имеет более высокий приоритет, чем оператор сложения:
Например, x = 7 + 3 * 2. Здесь x присваивается значение 13, не 20, потому что оператор «*» имеет более высокий приоритет, чем «+», так что сначала перемножается «3 * 2», а затем добавляется «7».
В таблице операторы с наивысшим приоритетом размещаются в верхней части, и уровень приоритета снижается к нижней части таблицы. В выражении высокий приоритет операторов в Java будет оцениваться слева направо.
Тема 3. Операторы в Java
Операторы — это специальные символы (или целые слова), с помощью которых можно выполнять некоторые действия с данными (аргументами). Операторы, работающие с одним аргументом, называются унарными, с двумя — бинарными, а с тремя — тернарными. Те, что нужно писать до операнда, называют префиксными, те, что после, — постфиксными, но большинство из них нужно писать между аргументами, их называют инфиксными бинарными операторами.
Все операторы в Java, а их больше сорока, можно разбить на группы:
- арифметические,
- битовые,
- операторы сравнения,
- логические,
- операторы присваивания
и отдельностоящие instanceOf и тернарный (условный) оператор.
Арифметические операторы используются для осуществления привычных нам арифметических вычислений: сложение, вычитание, умножение, деление и др.
Ниже в таблице приведен список всех арифметических операторов:
Оператор | Описание | Пример |
---|---|---|
+ | Инфиксный оператор сложения. Складывает левый и правый аргументы. С типом String используется для конкатенации | int a = 13 + 271; |
— | Инфиксный оператор вычитания. Вычитает из левого аргумента правый | int a = 271 — 103; |
/ | Инфиксный оператор деления. Делит левый аргумент на правый. При работе с целочисленными типами остаток от деления отбрасывается | int a = 80 / 11; // = 7 |
* | Инфиксный оператор умножения. Умножает левый аргумент на правый | int a = 2 * 2; // = 4 🙂 |
% | Инфиксный оператор получения остатка от деления. Делит левый аргумент на правый и возвращает остаток от деления | int a = 15 % 11; // = 4 |
++ | Унарный оператор инкремента. Увеличивает значение аргумента на единицу | int a = 11; a++; |
— | Унарный оператор декремента. Уменьшает значение аргумента на единицу | int a = 11; a—; |
Пример работы с арифметическими операторами:
Отдельно нужно уделить внимание операторам ++ и — . В зависимости от того, где они стоят (до переменной или после), меняется их поведение. Если оператор префиксный, то сначала будет изменено на единицу значение переменной, и только потом будет выполнено следующее действие с ней. Для постфиксного варианта все будет наоборот: сначала значение переменной будет использовано в следующей операции, а уже потом изменено на единицу.
Рассмотрим это подробнее на примере:
После выполнения этого кода значения переменных будут следующие: a — 2, b — 4, c — 5. При инициализации переменной с , сначала мы берем значение переменной а (1) и прибавляем к нему значение переменной b . И только потом значение а будет увеличено на единицу.
Попробуем поставить оператор ++ перед переменной а . Теперь после выполнения кода значений будут такие: a — 2, b — 4, c — 6. Так как мы сначала увеличили значение а на единицу, а уже потом использовали его в сложении с b .
Все операторы сравнения в Java инфиксные, т.е. располагаются между операндами. Результатом их работы всегда является тип boolean ( true или false ). Рассмотрим их в следующей таблице:
Оператор | Описание | Пример |
---|---|---|
== | Проверяет равенство аргументов. Если операнды равны, возвращает true . Для ссылочных типов проверяет лишь равенство ссылок, а не значений. Для сравнения значений необходимо использовать метод equals() (мы обсудим это в одной из следующих тем) | boolean a = 15 == 13; // false |
!= | Проверяет неравенство аргументов. Если операнды НЕ равны, возвращает true . Для ссылочных типов проверяет неравенство ссылок, для проверки значений нужно использовать метод equals() (мы обсудим это в одной из следующих тем) | boolean a = 15 != 13; // true |
> | Возвращает true , если левый аргумент больше правого по значению. Работает только с числами | boolean a = 80 > 11; // = true |
>= | Возвращает true , если левый аргумент больше или равен правому по значению. Работает только с числами | boolean a = 2 >= 2; // = true 🙂 |
true , если левый аргумент меньше правого по значению. Работает только с числами | boolean a = 15 | |
true , если левый аргумент меньше или равен правому по значению. Работает только с числами | boolean a = 11 |
Пример работы с операторами сравнения:
Наиболее часто такие операторы применяются совместно с условным оператором if . Об этом мы поговорим в следующей теме.
Логические операторы работают только с boolean данными, в результате выполнения возвращается тот же тип.
Оператор | Описание | Пример |
---|---|---|
&& | Инфиксный дизъюнктор (оператор «И»). Если оба операнда истинны (т.е. == true ), возвращает true . Следует отметить, что если выражение в левой части ложно, то правый аргумент уже не будет обрабатываться и проигнорируется | boolean a = (15 |
ǀǀ | Инфиксный конъюнктор (оператор «ИЛИ»). Если хотя бы один из операндов истинен (т.е. == true ), возвращает true . Следует отметить, что если выражение в левой части истинно, то правый аргумент уже не будет обрабатываться и проигнорируется | boolean a = (15 ǀǀ (3 == 3); // true |
! | Унарный оператор инверсии. Меняет истину на ложь и наоборот | boolean a = !false; // = true |
При работе с boolean данными операторы & и | выступают в качестве логических, а не битовых. Главное их отличие от && и || в том, что они всегда выполняют и левое, и правое выражение, независимо от их значений.
Побитовые операции используются крайне редко и на данном этапе я не буду заострять на них внимание. Ниже в таблице вы найдете перечень операторов с кратким описанием и примерами. (Просто, чтобы вы знали, что такие возможности в Java есть)
Оператор | Описание | Пример |
---|---|---|
& | Инфиксный оператор AND | int a = 123 & 65; |
ǀ | Бинарный оператор OR | int a = 123 ǀ 65; |
^ | Инфиксный оператор XOR | int a = 123 ^ 65; |
Префиксный оператор побитового дополнения | int a = 65; | |
int a = 123 | ||
>> | Инфиксный оператор арифметического сдвига вправо | int a = 123 >> 3; |
>>> | Инфиксный оператор нулевого сдвига вправо | int a = 123 >>> 1; |
Для указания значения переменной или константы используются операторы присваивания. Частично мы их рассматривали в предыдущей теме. Сейчас изучим другие возможности.
Все операторы присваивания являются инфиксными и работают с двумя операндами. Слева располагается переменная или константа, для которой мы хотим определить значение, а справа выражение, результатом которого и будет нужное нам значение.
Помимо основного оператора присваивания = , есть и короткие записи для арифметических и побитовых операций. Их можно использовать когда перед присваиваиваем нужно получить текущее значение переменной и выполнить с ним какое-то действие. Например, мы хотим увеличить значение целочисленной переменной на 10. Мы можем сделать это так:
вторую строку можно укоротить, если использовать специальный оператор присваивания += . И код будет выглядеть так:
В данном случае оператор присваивания сначала выполнит сложение a + 10 и только потом присвоит полученный результат переменной a .
Аналогичные операторы есть и для других случаев:
Оператор | Пример | Аналог |
---|---|---|
+= | a += 1; | a = a + 1; a++; |
-= | a -= 3; | a = a — 3; |
*= | a *= 2; | a = a * 2; |
/= | a /= 4 | a = a / 4; |
%= | a %= 5; | a = a % 5; |
a | a = a | |
>>= | a >>= 7 | a = a >> 7; |
&= | a &= 8 | a = a & 8; |
^= | a ^= 9 | a = a ^ 9; |
ǀ= | a ǀ = 10 | a = a ǀ 10; |
Ключевое слово instanceOf используется для проверки отношения объекта к определенному классу. Подробнее об этом мы будем говорить в блоке про ООП.
Условный (тернарный) оператор
Этот оператор заметно отличается от всех рассмотренных. Во-первых, это тернарный оператор, т.е. работает он с тремя аргументами. Во-вторых, он уже ближе к управлению логикой приложения (Control Flow).
Основная задача условного оператора — выбор одного из двух выражений, опираясь на результат выполнения третьего. Схематично он выглядит так: операнд1 ? операнд2 : операнд3 , где операнд1 — переменная boolean или выражение, возвращающее этот тип; операнд2 выполняется, если операнд1 == true ; операнд3 выполняется, если операнд1 == false .
Нашел ошибку или есть что добавить? Обязательно напиши мне об этом, рад любой обратной связи.
JavaScript Сравнения и логические операторы
Сравнение и логические операторы используются для проверки на true или false .
Оператор сравнения
Операторы сравнения используются в логических операторах для определения равенства или различия между переменными или значениями.
Учитывая, что x = 5 , в таблице ниже объясняются операторы сравнения: Если x = 5 , в таблице ниже описаны операторы сравнения:
Операторы | Описание | Сравнение | Возврат | Редактор кода | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
== | равно | x == 8 | false | Редактор кода » | ||||||||||||||||||||||||||
x == 5 | true | Редактор кода » | ||||||||||||||||||||||||||||
x == «5» | true | Редактор кода » | ||||||||||||||||||||||||||||
=== | равное и равный тип | x === 5 | true | Редактор кода » | ||||||||||||||||||||||||||
x === «5» | false | Редактор кода » | ||||||||||||||||||||||||||||
!= | не равно | x != 8 | true | Редактор кода » | ||||||||||||||||||||||||||
!== | не равное или не равный тип | x !== 5 | false | Редактор кода » | ||||||||||||||||||||||||||
x !== «5» | true | Редактор кода » | ||||||||||||||||||||||||||||
x !== 8 | true | Редактор кода » | ||||||||||||||||||||||||||||
> | больше | x > 8 | false | Редактор кода » | ||||||||||||||||||||||||||
= | больше или равно | x >= 8 | false | Редактор кода » | ||||||||||||||||||||||||||
Оператор | Описание | Пример | Редактор кода |
---|---|---|---|
&& | И | (x 1) будет true | Редактор кода » |
|| | ИЛИ | (x == 5 || y == 5) будет false | Редактор кода » |
! | НЕ | !(x == y) будет true | Редактор кода » |
Условный (троичный) оператор
Кроме того, JavaScript содержит условный оператор, который присваивает значение переменной на основе некоторого условия.
Синтаксис
Пример
Сравнение различных типов
Сравнение данных разных типов может дать неожиданные результаты.
При сравнении строки с числом JavaScript преобразует строку в число при сравнении. Пустая строка превращается в 0. Нечисловая строка преобразуется в NaN, которая всегда false.
Пример | Значение | Редактор |
---|---|---|
2 «Андрей» | false | Редактор кода » |
2 == «Андрей» | false | Редактор кода » |
«2» «12» | true | Редактор кода » |
«2» == «12» | false | Редактор кода » |
При сравнении двух строк, то «2», будет больше, чем на «12» и, поскольку (в алфавитном порядке) 1 меньше 2.
Для обеспечения правильного результата переменные должны быть преобразованы в правильный тип перед сравнением:
detector