что такое boolean в java
Тип Boolean и операторы сравнения в Java
Узнаём про булев тип, операции сравнения, условные конструкции if-else, switch и тернарный оператор. Осмысляем instanceof. Всё подробно и с примерами.
Boolean — это тип данных, переменные которого принимают одно из значений:
Булевы переменные в Java создают так:
Значение типа boolean возвращают операции сравнения, логические операции и их сочетания. Выражения с ними — это по сути условные высказывания, которые могут быть правдивы или нет.
Java-разработчик, преподаёт в Skillbox, осваивает машинное обучение.
Операция сравнения
Операция сравнения возвращает:
Например, мы хотим сравнить в Java значения переменных a и b. Для этого используем оператор >, который возвращает булево значение (true или false).
a > b равно true, когда значение переменной a больше значения переменной b (операнд слева от > больше правого), а иначе — false.
Оператор > сравнил операнд слева с операндом справа. Результат сравнения мы присвоили булевой переменной c.
Так как 4 > 3 (высказывание правдиво), значение переменной c после выполнения кода станет равным true.
Операторы сравнения в Java
Один оператор сравнения мы рассмотрели выше, а всего в Java их шесть:
Где нужны значения типа Boolean
Булевы значения и условные выражения часто используются в условиях операторов ветвления, тернарного оператора и циклов.
Операторы ветвления
Оператор ветвления позволяет выбрать и исполнить определённый блок кода в зависимости от срабатывания некоторого условия.
Есть два оператора ветвления (условные конструкции): if-else и switch.
Его синтаксис выглядит так:
В круглых скобках после if указывают условное выражение (высказывание). Если оно истинно (то есть результат его вычисления равен true), то выполняется код в фигурных скобках после условия, иначе выполняется код по ветке else (если она есть).
Проверяем условие в круглых скобках:
Если да, то в консоль выводим: « Высказывание в скобках правдивое», иначе ничего не выводим.
Так как 3 и правда больше 2, то в консоли появилось наше сообщение.
Печатаем « Высказывание в скобках правдивое», если результат вычислений в круглых скобках = true. В ином случае выводим: « Высказывание в скобках ложное».
Так как выражение (3 Высказывание в скобках ложное».
Вложенные конструкции
Допустим, мы хотим проверить некое условие, и если оно не выполнилось — проверить другое условие и так далее. Сделать это можно двумя способами.
Синтаксис тут такой:
//действия, если условие1 выполнено;
//действия, если условие2 выполнено;
//действия, если все предыдущие условия не выполнились;
Каждое логическое условие записывают через комбинацию else if, после которых в круглых скобках идёт альтернативное условие. Последний вариант (если ни одно из условий не сработало) записывается через else без условия.
Синтаксически это выглядит так:
//действия, если условие1 выполнено;
//действия, если условие2 выполнено;
//действия, если условие3 выполнено;
//действия, если условие последнего if тоже не выполнилось;
Каждое следующее условие проверяется только в том случае, если предыдущее не выполнилось. Как только найдётся одно правдивое условие (или мы достигнем последнего else), выполнится код в фигурных скобках после этого условия, а оставшаяся цепочка условий будет пропущена.
Иногда условий else if нужно довольно много:
Оператор множественного выбора (switch)
Он применяется, когда нужно выполнить один из нескольких блоков кода в зависимости от значения аргумента.
Выгода от switch тем очевиднее, чем больше проверок и вариантов действий нам нужно.
В круглых скобках указывается аргумент для switch, а в каждом блоке case — чему этот аргумент должен равняться, чтобы выполнился код после двоеточия.
В нашем случае выполнится case 5, так как переменная dayOfWeekNum (порядок дня в неделе) равна 5.
В конце каждого блока case мы ставим break. Если этого не сделать, то выполнится также код из следующего блока case и так далее.
Если для нескольких значений аргумента нужно выполнять один и тот же код, то блоки case можно объединить.
Например, для будних дней ( dayOfWeekNum от 1 до 5) будем выводить, какой это по счёту рабочий день, а для уикенда — первый или второй это выходной:
Теперь при значении переменной dayOfWeekNum от 1 до 5 выполнится один и тот же код, и для значений 6 и 7 — тоже одинаковый.
Также можно задать действие, если ни одно из условий не сработало. Делается это с помощью ключевого слова default:
Примечание. Слово break означает выход из switch…case. Поэтому если ваш блок default стоит не последним, то тоже завершайте его словом break, иначе выполнится код из следующего case.
Ограничения для оператора switch
Есть ряд условий, которые следует выполнять:
Обновлённый оператор switch в Java 14
С версии 14 Java поддерживает новый синтаксис switch:
Теперь нам не нужно писать break, а двоеточие заменено на стрелочку и фигурные скобки. Блок default по-прежнему не обязателен.
Если код блока case состоит всего из одной строки, то фигурные скобки можно не использовать:
В операторе switch прошлой версии мы задавали одно действие для нескольких значений case, располагая пустые case над case c кодом:
В новой версии для этого хватает одного case, а связанные с ним значения разделяются запятой. Например:
Теперь switch — уже не просто оператор ветвления, он может вернуть значение. Это делается с помощью вспомогательного оператора yield.
В новой версии switch, когда нам нужно лишь вернуть значение из соответствующего case (он должен быть без кода), — можно обойтись и без слова yield:
Советы и упрощения
1. Фигурные скобки после if или else разрешено не ставить, если тело блока состоит всего из одной строки.
2. Вот так писать не следует (внимание на условие в if):
Код будет работать, но сравнение boolean с boolean в условии — это лишняя операция.
Поскольку метод isMoreFive сам возвращает булево значение — напишите вот так:
Логические операторы в Java
Знакомимся с каждым, узнаём про короткую и полную схемы вычислений. Проводим побитовые операции с целыми числами. Всё закрепляем на примерах.
Логические операции в Java возвращают значение типа boolean: true или false («правда» или «ложь»). Подробнее о булевом типе мы говорили здесь.
В языке Java есть шесть логических операторов. Первые четыре представлены в таблице ниже.
Логический оператор | Обозначение в Java | Выражение | Результат | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
«И» (AND): конъюнкция, логическое умножение | && | true && true false | |||||||||||||||||||||||||||||||||||||||||
Включающее «ИЛИ» (OR): дизъюнкция, логическое сложение | || | true || true true | |||||||||||||||||||||||||||||||||||||||||
Исключающее «ИЛИ» (XOR): строгая дизъюнкция, логическое вычитание | ^ | true ^ true true | |||||||||||||||||||||||||||||||||||||||||
«НЕ» (NOT): инверсия, отрицание | ! | !true Java-разработчик, преподаёт в Skillbox, осваивает машинное обучение. Где нужны логические операторыУсловные выражения, в свою очередь, применяются в операторах ветвления ( if-else, switch, тернарном). Подробнее об этих операторах тут. Как применятьДопустим, мы хотим проверить, что значение переменной a больше значений в переменных b и c. То есть сравнить операнд a с двумя другими. Нам поможет логический оператор && (И). Логический оператор && (И) возвращает true, если слева и справа от него стоят значения true, а иначе — false. Иными словами, если оба логических высказывания истинны, то и операция && (И) возвращает истину. Как вычисляется значение выражения (a > b) && (a > c): Сначала проверяется условие ( a > b). Оно вернёт true, так как 6 больше 4. Далее проверяется условие ( a > c), которое также вернёт true, ведь 6 больше 3. Теперь у нас с двух сторон от логического оператора && стоят значения true. По определению выше или по таблице ещё выше, результат вычисления логического выражения ( true && true) равен true. Результат операции ( a > b) вернёт true, так как 6 больше 4, а операция ( a > c) уже вернёт false, так как 6 не больше 7. Значит, слева от логического оператора && стоит true, а справа — false. Следовательно, результат вычисления логического выражения (мы присвоили его булевой переменной d) будет false. Результат операции сравнения ( a > b) равен false, а что вернёт операция ( a > c), уже значения не имеет (смотрите определение выше) — результат вычисления логического выражения (мы присвоили его булевой переменной d) будет равен false. Рассмотрим примеры с другими операторами. Значение переменной d равно true. Теперь вычисляйте вы. Значение d равно false. О практическом применении XOR читайте здесь. Значение d стало true. Полные и сокращённые версии AND и OR&& и || называются сокращёнными логическими операторами AND и OR соответственно, или операторами короткой схемы вычислений. В спецификации Java их ещё зовут условными. Значения их операндов могут быть только булева типа. В отличие от двойных, одиночные & и | называются операторами полной схемы вычислений. Значения их операндов могут быть как только булевыми, так и только целочисленными (вместе с оператором ^ они используются в побитовых операциях). В чём разницаВ том, что для операторов & и | всегда вычисляются значения обоих операндов, а при работе операторов && и || второй операнд вычисляется только по необходимости. То есть иногда результат выражения однозначно определён уже по первому операнду: && и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях. Как использовать&& и || позволяют экономить вычисления (применять короткую схему) и помогают избегать ошибок. Как это делается? Начнём с оператора &&. Приведём фрагмент из таблицы выше:
|