что такое boolean в java
Тип данных boolean и логические операторы — введение в Java 005 #
Правда или ложь
Boolean #
Boolean в Java — это логический тип данных. Переменная типа boolean может принимать всего два значения — это правда или ложь — true & false. Эти два значения обозначаются в других языках и часто выдаются на экран как 1 и 0, но всё же не равны этим значениям: например, выражение boolean b = 0; приведёт к ошибке при компиляции программы. Но мы можем сравнить переменные или выполнить логическую операцию с типом данных boolean:
Говоря о булевых или логических типах данных, нам придётся освежить свои воспоминания о булевой алгебре и возможных логических операциях.
Таблица истинности #
a | b | a & b | a I b | a ^ b | ! a |
---|---|---|---|---|---|
false | false | false | false | false | true |
false | true | false | true | true | true |
true | false | false | true | true | false |
true | true | true | true | false | false |
Давайте представим себе пример из жизни: мы ищем на сайте все статьи, которые мы опубликовали и комментировали. Должны быть два совпадения — это вариант a & b. Или мы ищем все статьи, в которых есть упоминание слов “алгебра” или “математика” — это a | b. А отыскать все статьи, которые написаны не нами, можно, применив логический оператор !a. Стать исключительно космонавтом или медиком — это a ^ b
Это так называемые булевы или логические операции. В интернете много материала по ключевым словам: таблица истинности, булева алгебра, теория множеств, конъюнкция, дизъюнкция.
С помощью таблицы с результатами логических операций можно перепроверить работу Java:
Надо понимать, что значение вашего чекбокса (галочки) на сайте Facebook при регистрации — “с правилами ознакомлен и согласен” — и есть значение булевой переменной в программе.
Логические операторы, которые поддерживаются Java #
Логический операторы | Значение |
---|---|
== | Проверка на соответствие (допустим, что a равен b) |
!= | Не равно (если a не равно b, то) |
! | Отрицание, логическое не |
& | Логическое И, and |
| | Логическое или, or |
^ | Исключительное или, XOR |
&& | Укороченный & |
|| | Укороченный или |
Амперсанд — это название знака &.
Карет (англ. caret) — это название знака ^.
Пайп (pipeline), Вертикальная черта — это название знака |.
Мы ещё раз рассмотрим данные операторы позже. Пока мы должны понимать, что с арифметическими операторами всё немного сложнее, чем хотелось бы.
Булева алгебра #
Булева алгебра, ударение на первый слог. БУлева.
Принципиально основы булевой алгебры не должны были давать в школе. Программисты учат её в институте.
Давайте я попробую на пальцах рассказать основы и то, что нам понадобится на минимальном уровне.
Дизъюнкция #
Когда мама ИЛИ папа дают мне деньги на карманные расходы, то я бегу и покупаю себе мороженное.
Знакомая ситуация, деньги можно получить в трёх случах из четырёх. В одном случае же деньги может дать и мама, и папа, тогда и друга можно угостить мороженным.
Конъюнкция #
В Java оператор «&» и «&&».
Если светит солнце “И” у меня выходной, то я иду купаться на озеро.
Антиваленц #
“XOR”, эксклюзивное или, “EOR”, “EXOR”. В Java оператор «^».
Только на горных лыжах в Австрии или на лошадях у бабушки в деревне я забываю про свою работу.
Или ты садишься за математику или я расскажу всё отцу.
Лампочка в больнице может работать от городского электричества или от дизельного генератора в подвале. Но не от двух источников одновременно.
Отрицание #
Negation. NOT. В Java оператор «!».
Давайте представим огромный станок по продольной распилке леса. В цеху есть две кнопки. Зелёная и красная. При включении зелёной пила должна работать. При нажатии на красную пила должна остановится.
Дополнительные материалы #
Домашнее задание #
Выясните, кто ел варенье, если известно, что двое из них оба раза сказали правду, а третий один раз соврал, а один раз сказал правду.
Тип данных boolean
Ключевой момент: тип данных boolean объявляет переменную со значением true или false.
Реляционные операторы
Как бы вы сравнили два значения, на предмет, является ли радиус больше чем 0, равен 0 или меньше чем 0? Java представляет шесть реляционных операторов (также известных как операторы сравнения), показанных в таблице:
Предупреждение: оператор проверки равенства представляет собой два знака равно (==), а не один знак равенства (=). Последний символ используется для присваивания.
Результат сравнения – это булева величина: true или false. Например, следующая инструкция отобразит true:
Булевы переменные
Переменные, которые содержат булево значение, известны как булевы переменные. Тип данных boolean используется для объявления булевых переменных. Переменная boolean может содержать одно из двух значений: true или false. Например, следующее выражение присваивает true переменной lightsOn:
true и false являются литералами, т.е. используются буквально, как есть, в точности как цифра, такая как 10. Они обрабатываются как зарезервированные слова и не могут использоваться как идентификаторы в программе.
Предположим, вы хотите написать программу для практики в начальном сложении. Программа генерирует два случайных односимвольных числа number1 и number2 и отображает студенту вопрос вроде «Сколько будет 8+5?», примерно так:
После того, как студент вводит ответ, программа показывает сообщение, свидетельствующее о верности или ошибочности ответа.
Имеется несколько способов сгенерировать случайные числа. На данный момент сгенерируйте первое число используя System.currentTimeMillis() % 10, а второе число используя System.currentTimeMillis() / 7 % 10.
Строки 5-6 генерируют два числа, number1 и number2. Строка 14 получает ответ от пользователя. Ответ проверяется в троке 18 используя булевое выражение number1 + number2 == answer. Слово true означает «истина», «верно», слово false означает «ложь», «неверно».
Pro Java
Страницы
8 апр. 2015 г.
Тип boolean представляет значения истинности. Существует только два возможных значения для данного типа, представляющих два булевых состояния: включено или выключено, да или нет, истина или ложь. Java резервирует слова true и false для представления этих булевых значений они же являются и двумя допустимыми литералами для задания значений переменных типа boolean.
Помимо задания логического значения непосредственно через оператор присваивания переменной boolean, значения логического типа возникают в результате различных сравнений, вроде 2 > 3, и используются главным образом в условных операторах и операторах циклов.
Операторы сравнения
В Java предусмотрены следующие операторы равенства:
Равно (==)
Оператор == возвращает true (истина), если оба его операнда равны; если нет, то возвращается false (ложь).
Не равно (!=)
Оператор != прямо противоположен оператору ==. Он возвращает true, если два примитивных операнда имеют разные значения либо если два ссылочных операнда относятся к различным объектам или массивам. В противном случае он возвращает false.
Меньше ( Возвращает true, если первый операнд меньше второго.
Меньше или равно ( Возвращает true, если первый операнд меньше или равен второму.
Больше (>)
Возвращает true, если первый операнд больше второго.
Больше или равно (>=)
Возвращает true, если первый операнд больше или равен второму.
Булевы операторы
Как вы уже знаете, операторы сравнения сравнивают операнды и возвращают значение типа boolean. Величины такого типа часто используются в операторах ветвления и цикла. Чтобы выбор ветви и проверка цикла по условиям стали полезнее простого сравнения, можно задействовать булевы (или логические) операторы для объединения нескольких выражений сравнения в одно, более сложное выражение. Для логических операторов нужны операнды со значениями типа boolean. Эти операторы также возвращают значения типа boolean. Существуют такие логические операторы:
Условное И (&&)
if ( x 3 ) // Если оба сравнения истинны
Следует выбрать тот стиль, который вы считаете более удобным для чтения.
Второе и третье сравнения в данном выражении могут привести к ошибкам, если первое или второе сравнение возвращают false. К счастью, это не проблема, так как поведение оператора && условно.
Условное ИЛИ (||)
Логическое НЕ (!)
Так как оператор ! является унарным, он имеет высокий приоритет, и зачастую его нужно заключать в круглые скобки:
Логическое И (&)
С операндами типа boolean поведение оператора & аналогично поведению оператора &&, но он всегда вычисляет оба операнда, каким бы ни было значение первого операнда. Однако данный оператор практически всегда используют с целыми числами как побитовый оператор.
Логическое ИЛИ (|)
Данный оператор выполняет логическую операцию ИЛИ над двумя операндами типа boolean. Он аналогичен оператору ||, но всегда вычисляет оба операнда, даже если первый операнд является true. Оператор | почти всегда используется как побитовый оператор для целых чисел, а с операндами типа boolean его применяют достаточно редко.
Логическое исключающее ИЛИ (^)
Логический оператор присваивания И (&=)
Данные оператор совмещает две операции: логическое И и операцию присваивания. Сперва, над двумя операндами данного оператор совершается операция логического И, а затем происходит присвоение значения этой операции левому операнду.
Например запись x&=y, аналогична записи x=x&y.
Логический оператор присваивания ИЛИ (|=)
Данный оператор аналогичен оператору &=, но только перед присваиванием совершает операцию логического ИЛИ над операндами.
Например запись x|=y, аналогична записи x=x|y.
Логический оператор присваивания исключающее ИЛИ (^=)
Аналогично двум предыдущим, только перед присваиванием совершает над операндами операцию исключающего логического ИЛИ.
Например запись x^=y, аналогична записи x=x^y.
Результаты выполнения булевских логических операций можно представить таблицей:
Ну а теперь немного попрактикуемся на простой программке:
Данная программа выводит следующие значения:
В этой программе все просто и не нужно что-то объяснять дополнительно. Если что-то не понятно, то читаем еще раз матчасть. А вот для следующей программы нужно будет немного разъяснений.
Методы compare1 и compare2 сравнивают переданное им значение на то меньше оно семи или больше и возвращают соответствующий логический результат – true или false.
В строке 22 мы присваиваем boolean переменной a результат сравнения логическим И значения возвращаемые методами compare1 и compare2, которым были переданы значения 5 и 3 соответственно. В данном случаем compare1 вернет true, поскольку 5 меньше 7, а compare2 вернет false, поскольку 3 меньше 7. И в данном случае выполнятся оба метода – compare1 и compare2, потому что первый оператор условного И вернул true. Если бы он вернул false, то метод compare2 не выполнялся бы, что и происходит в 26 строке.
Ну и теперь посмотрим на вывод этой программы:
Надеюсь, что все с этой темой понятно. Если нет, то внимательно вкуриваем мануал и медитируем… медитируем… медитируем…. омммммм…
Логические операторы в 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 их ещё зовут условными. Значения их операндов могут быть только булева типа. В отличие от двойных, одиночные & и | называются операторами полной схемы вычислений. Значения их операндов могут быть как только булевыми, так и только целочисленными (вместе с оператором ^ они используются в побитовых операциях). В чём разницаВ том, что для операторов & и | всегда вычисляются значения обоих операндов, а при работе операторов && и || второй операнд вычисляется только по необходимости. То есть иногда результат выражения однозначно определён уже по первому операнду: && и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях. Как использовать&& и || позволяют экономить вычисления (применять короткую схему) и помогают избегать ошибок. Как это делается? Начнём с оператора &&. Приведём фрагмент из таблицы выше:
|