Операторы отношения и логические операторы
Вы здесь: Главная >> Java-учебник >> Операторы отношения и логические операторы
Язык Java содержит полный комплект операторов отношения. Чтобы проверить равенство, следует использовать символы = =. Например, значение выражения 3 = = 7 равно false.
Для проверки неравенства используются символы ! = .
Так, значение выражения 3 != 7 равно true.
Кроме того, в языке Java есть обычные операторы < (меньше), > (больше), <= (меньше или равно) и => (больше или равно).
Java, как и язык C++, использует символы для обозначения логического оператора «и», а также символы | | для обозначения логического оператора «или» . Как обычно, знак восклицания означает логический оператор отрицания . Операторы && и | | вычисляются по сокращенной схеме, т.е. если в ходе вычисления выражения А && В выясняется, что подвыражение А ложно, то подвыражение В не вычисляется.
Например, в выражении
х != 0 && 1/х > х+у // Не делить на 0.
вторая часть никогда не вычисляется, если значение переменной х равно нулю.
Таким образом, подвыражение 1/х не вычисляется, если х равно нулю и деления на нуль не происходит.
Аналогично, если оказывается, что выражение А истинно, то значение выражения А | | В автоматически становится истинным, и вычислять выражение В нет необходимости.
В языке Java есть также тернарный оператор ? :, который иногда оказывается полезным. Выражение
условие ? e1 : е2
означает, что если условие истинно, то вычисляется выражение e1, а если ложно — е2.
Например, выражение
х < у ? х : у
вычисляет меньшее из чисел х и y.
Побитовые операторы
Работая с любыми целочисленными типами, можно применять операторы, имеющие дело непосредственно с битами, из которых состоят целые числа. Это значит, что для получения отдельных битов числа можно использовать технику масок.
В языке Java есть следующие побитовые операторы:
S («и») | {«или») ^ («исключающее или») ~(«не»)
Эти операторы работают с битами. Например, если n — это целое число, то выражение
int fourthBitFromRight = (n & 8) /8;
равно единице, если четвертый бит справа в двоичном представлении числа n равен единице, и нуль, если нет.
Используя оператор & с соответствующей степенью двойки, можно замаскировать все биты, кроме одного.
Операторы & и | применяются к булевским переменным и вычисляют булевские значения.
Эти операторы аналогичны операторам && и | |, за исключением того, что побитовые операторы не вычисляются по сокращенной схеме, т.е. перед вычислением результата вычисляются оба аргумента.
В языке Java есть также операторы >> и <<, сдвигающие битовое представление числа вправо или влево. Эти операторы часто оказываются удобными, если нужно построить битовое представление на основе маски: int fourthBitFromRight = (n s (1 « 3)) » 3;
В языке есть даже оператор >>>, заполняющий старшие разряды нулями, в то время как оператор » приписывает знаковый бит к старшим разрядам.
Оператора <« в языке Java нет.
Аргумент, стоящий в правой части операторов побитового сдвига, сокращается по модулю 32 (если левая часть является числом типа long, правая часть сокращается по модулю 64).
Например, значение выражения 1«35 эквивалентно выражению 1 <<3, или 8.
В языках C/C++ не фиксируется, какой сдвиг выполняет оператор >> : арифметический (вплоть до знакового бита) или логический (заполняя свободные разряды нулями).
Разработчики средств реализации языка могут выбрать тот вариант, который покажется им более эффективным. Это значит, что оператор >> в языке C/C++ в действительности лишь определяет некое неотрицательное число.
Язык Java снимает эту неопределенность.
Сергей Владимирцев
28.01.2011
Java логические операторы — Хитрый Лисс
Блог ЛиссаАвтор adm-pcst На чтение 2 мин Просмотров 133 Опубликовано
Содержание
- Что означает && в Java?
- Какие операторы есть в Java?
- Как работает XOR в Java?
- Что такое логический оператор в Java?
- Чем отличается логический оператор & от &&?
- Для чего используется оператор &&?
- Какие существуют операторы?
- Что такое i ++ в Java?
- Какие математические операции есть в Java?
- Как работает XOR?
Что означает && в Java?
Логический оператор && (И) возвращает true, если слева и справа от него стоят значения true, а иначе — false. Иными словами, если оба логических высказывания истинны, то и операция && (И) возвращает истину.
Какие операторы есть в Java?
9. Java — Основные операторы языка
- арифметические операторы;
- операторы сравнения;
- побитовые операторы;
- логические операторы;
- операторы присваивания;
- прочие операторы.
Как работает XOR в Java?
Логическая операция XOR , или exclusive или , принимает два логических операнда и возвращает true тогда и только тогда, когда операнды различны. Таким образом, он возвращает false, если два операнда имеют одинаковое значение.
Что такое логический оператор в Java?
Логические операторы работают только с операндами типа boolean. Все логические операторы с двумя операндами объединяют два логических значения, образуя результирующее логическое значения. Не путайте с побитовыми логическими операторами.
Чем отличается логический оператор & от &&?
Побитовый оператор & — это бинарный оператор, побитно выполняющий операцию И над своими операндами. Следующий код демонстрирует использование оператора & . && — это логический оператор И , работающий с логическими операндами.
Для чего используется оператор &&?
Логический оператор AND ( && ) возвращает значение true , если оба операнда являются и возвращаются true false в противном случае. Операнды неявно преобразуются в тип bool перед вычислением, а результат имеет тип bool . Логическое И имеет ассоциативность в направлении слева направо.
Какие существуют операторы?
Выражения и операторы
- Операторы присваивания
- Операторы сравнения
- Арифметические операторы
- Битовые (поразрядные) операторы
- Логические операторы
- Строковые операторы
- Условный (тернарный) оператор
- Оператор запятая
Что такое i ++ в Java?
В Java инкремент и декремент — это в первую очередь унарные операторы, которые применяются к какой-либо числовой переменной. . XOR выполняется с 2-мя битами (a и b). Результат выполнения операции XOR (исключающее ИЛИ) равен 1, когда один из битов b или a равен 1. В остальных ситуациях результат применения оператора XOR равен 0.
операторов Java с приоритетом и ассоциативностью
Операторы Java с приоритетом и ассоциативностьюОператоры Java с приоритетом и ассоциативностью
Этот файл содержит таблицу всех Java
операторы вместе с их приоритетом
и их ассоциативность. Таблица
расположены от высшего к низшему приоритету
как вы идете сверху вниз.
Столбец P
содержит
приоритет, а столбец A
показывает ассоциативность (слева ( L
)
или право ( R
)) оператора.
Операторы между пунктирными линиями имеют одинаковые
«уровень приоритета». Содержание
таблица взята из 4-го издания
«Java в двух словах» Дэвида Фланагана, опубликованная
от О’Райли.
P A Оператор Тип(ы) операнда Выполненная операция -------------------------------------------------- -------------------- 15 л .объект, член доступ к члену объекта [] массив, доступ к элементу массива int ( args ) метод, вызов метода arglist ++, -- переменная постинкремент, декремент -------------------------------------------------- -------------------- 14 R++, -- переменная преинкремент, декремент +, - число унарный плюс, унарный минус ~ целочисленное побитовое дополнение ! логическое логическое НЕ -------------------------------------------------- -------------------- 13 R новый класс, создание объекта arglist ( тип ) тип, любое приведение (преобразование типа) -------------------------------------------------- -------------------- 12 L *, /, % число, умножение числа, деление, остаток -------------------------------------------------- -------------------- 11 Л +, - число, сложение, вычитание + строка, любая конкатенация строк -------------------------------------------------- -------------------- 10 L > целое число, целочисленный сдвиг вправо с расширением знака >>> integer, целочисленный сдвиг вправо с нулевым расширением -------------------------------------------------- -------------------- 9L , >= число, число больше, больше или равно ссылка instanceof, сравнение типов -------------------------------------------------- -------------------- 8 L == примитивный, примитивный равный (имеют одинаковые значения) != примитив, примитив не равен (имеют разные значения) == ссылка, ссылка равна (относится к одному и тому же объекту) != ссылка, ссылка не равна (относится к разным объектам) -------------------------------------------------- -------------------- 7 L & целое число, целое побитовое И & логическое, логическое логическое И -------------------------------------------------- -------------------- 6 L ^ целое число, целочисленное побитовое XOR ^ логическое значение, логическое логическое XOR -------------------------------------------------- -------------------- 5 л | целое, целое побитовое ИЛИ | логическое значение, логическое логическое значение ИЛИ -------------------------------------------------- -------------------- 4 L && логическое значение, логическое условное И -------------------------------------------------- -------------------- 3 л || логическое, логическое условное ИЛИ -------------------------------------------------- -------------------- 2 R ?: логический, любой, любой условный (тернарный) оператор -------------------------------------------------- -------------------- 1 R = переменная, любое присвоение *=, /=, %= переменная, любое присваивание с операцией +=, -= >=, >>>=, &=, ^=, |= -------------------------------------------------- --------------------
Приоритет операторов — это то, что мы иногда принимаем как должное, особенно если мы хорошо знакомы с стандартные правила приоритета для общих арифметических операций. Но излишняя покладистость может поставить нас в некоторую опасность, особенно в такие языки, как Java и C++, которые имеют такое разнообразие операторов, стоит быть начеку.
Список всех тем
Оператор Java :: Оператор SDK
В этом разделе мы реализуем оператор на Java, который определит некоторый пользовательский ресурс для управления и развертывания трехуровневого приложения:
Внешний интерфейс : приложение React из
docker.io/jdob/visitors-webui:1.0.0
Серверная часть : приложение Python из
docker.io/jdob/visitors-service:1.0.0
БД : MySQL 5.7 из
docker.io/library/mysql:5.7
Создайте новый оператор
Создайте новый каталог на вашем компьютере, например: $HOME/visitors-operator
operator-sdk init --domain operator.redhat.com --plugins quarkus
Это создаст для вас пустой проект Quarkus
.
Плагин работает на несколько версий ниже, поэтому откройте файл pom.xml
и в разделе свойств обновите его до этого:
2.0.2 2.5.1.Final
И вы можете удалить эту часть из dependencyManagement
:
<зависимость>io.fabric8 kubernetes-client-bom <версия>${fabric8-client.version}пом импорт зависимость>
Генерация API
Давайте создадим API для нашего оператора:
operator-sdk create api --group=app --version=v1 --kind=Visitor
Это создаст основу для классов вашего оператора: контроллер и объекты POJO.
Как правило, рекомендуется иметь один контроллер, отвечающий за управление каждым API, созданным для проекта, чтобы правильно следовать целям проектирования, установленным средой выполнения контроллера.
Определение API
Для начала мы представим наш API, определив тип Посетителя
:
Открытый сгенерированный API: $HOME/visitors-operator/src/main/java/com/redhat/operators/VisitorSpec.java
Заполните эти разделы следующим образом:
package com.redhat.operators; открытый класс VisitorSpec { частный размер int; частное строковое название; публичный интервал getSize () { размер возврата; } public void setSize (целый размер) { этот.размер = размер; } публичная строка getTitle () { вернуть заголовок; } public void setTitle (заголовок строки) { это.название = название; } }
А также обновите класс состояния, откройте: $HOME/visitors-operator/src/main/java/com/redhat/operators/VisitorStatus.java
package com.redhat.operators; открытый класс VisitorStatus { приватная строка backendImage; частная строка frontendImage; публичный Статус Посетителя () { } public VisitorStatus (String backendImage, String frontendImage) { это. backendImage = backendImage; this.frontendImage = frontendImage; } публичная строка getBackendImage() { вернуть фоновое изображение; } public void setBackendImage (строка backendImage) { это.backendImage = backendImage; } публичная строка getFrontendImage() { возврат внешнего интерфейса; } public void setFrontendImage (String frontendImage) { this.frontendImage = frontendImage; } }
Создание CRD
С расширением quarkus
ваши CRD будут генерироваться каждый раз, когда вы компилируете свой проект.
Запустите mvn clean package
и проверьте папку target/kubernetes
, она содержит ваш CRD, а также все другие ресурсы, необходимые для развертывания вашего оператора в кластере.
Вы также можете убедиться, что CRD будут применяться к кластеру автоматически при работе в режиме dev
, перейдите к src/main/resources/application.
и установить:
quarkus.operator-sdk.crd.apply=true
Контроллеры
Скопируйте логику контроллеров:
cp -R $TUTORIAL_HOME/apps/java/quarkus/src/main/java/com/redhat/operators/controllers $HOME/visitors-operator/src/main/java/com /redhat/операторыЗапустите свой оператор локально перезагрузить и т. д.
Применить пользовательский ресурс
Теперь вы можете применить пользовательский ресурс
apiVersion: app.redhat.com/v1 тип: VisitorsApp метаданные: имя: VisitsApp-образец спецификация: размер: 1 title: "Мой первый оператор в Quarkus!"
kubectl apply -f $TUTORIAL_HOME/apps/cr/visitorsapp-java.yaml
Проверить создание модулей:
kubectl получить модули ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ mysql-86c559bb7f-kjjvt 1/1 Работает 0 28 часов посетители-бэкенд-7489bb97dd-wggkt 1/1 Работает 0 28ч Посетители-интерфейс-86df47fffc-d2bgl 1/1 Работает 0 28h
Проверьте только что созданный CR:
kubectl get посетитель
ИМЯ ВОЗРАСТ visitorapp-sample 1m
Получить статус своего VisitorApp:
kubectl описать посетителя visitorapp-sample
Имя: visitorapp-sample Пространство имен: по умолчанию Ярлыки: <нет> Аннотации: <нет> Версия API: app.redhat.com/v1 Вид: Посетитель Метаданные: Отметка времени создания: 2021-10-28T07:39:34Z Спецификация: Размер: 1 Название: Мой первый оператор в Go! Положение дел: Бэкенд-образ: jdob/visitors-service:1.0.0 Внешний вид: jdob/visitors-webui:1.0.0 События: <нет>
Получите доступ к VisitorsApp! Служба kubernetes для внешнего интерфейса была создана ( visitapp-sample-frontend-service
) и представлена как NodePort
на порту 30686
.
В Minikube получите IP-адрес Minikube и получите доступ к приложению:
IP=$(операторы minikube ip -p) PORT=$(kubectl get service/visitorsapp-sample-frontend-service -o jsonpath="{.spec.ports[*].nodePort}") завиток $IP:$ПОРТ
Или открыть в браузере:
Build and Push the Operator
Убедитесь, что в свойствах вашего приложения указана правильная группа контейнеров (с использованием вашей собственной группы/имени пользователя), т. е.
quarkus.