Операторы Java
Одно из самых базовых применений компьютеров — выполнение математических операций. Как компьютерный язык, Java также предоставляет богатый набор операторов для работы с переменными. Мы можем разделить операторы на следующие группы:
- Арифметические операторы
- Операторы отношения
- Побитовые операторы
- Логические операторы
- Операторы присваивания
- Другие операторы
Арифметические операторы
Арифметические операторы используются в математических выражениях, и их функция такая же, как в математике. В следующей таблице перечислены все арифметические операторы.
В примерах в таблице предполагается, что целочисленная переменная A имеет значение 10, а переменная B имеет значение 20:
| Operator | Описание | Пример |
|---|---|---|
| + | Сложение — складывает значения с обеих сторон оператора | A + B равно 30 |
| - | Вычитание — вычитает правый операнд из левого операнда | A - B равно -10 |
| * | Умножение — умножает значения с обеих сторон оператора | A * B равно 200 |
| / | Деление — делит левый операнд на правый операнд | B / A равно 2 |
| % | Остаток — остаток от деления левого операнда на правый операнд | B%A равно 0 |
| ++ | Инкремент: увеличивает значение операнда на 1 | B++ или ++B равно 21 (см. ниже, в чём разница) |
| -- | Декремент: уменьшает значение операнда на 1 | B-- или --B равно 19 (см. ниже, в чём разница) |
Пример
Приведённый ниже простой пример программы демонстрирует арифметические операторы. Скопируйте и вставьте следующую Java-программу, сохраните её как файл Test.java, затем скомпилируйте и запустите эту программу:
Пример
Запустить пример »
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5 a++ = 10 a-- = 11 d++ = 25 ++d = 27
Операторы инкремента и декремента
1. Операторы инкремента (++) и декремента (--)Это специальные арифметические операторы. В то время как арифметические операторы требуют двух операндов для выполнения операции, операторы инкремента и декремента работают с одним операндом.
Пример
Результат:
进行自增运算后的值等于4 进行自减运算后的值等于2
Пояснение:
int b = ++a; Процесс операции разбирается следующим образом: a=a+1=4; b=a=4; конечный результат: b=4, a=4
int d = --c; Процесс операции разбирается следующим образом: c=c-1=2; d=c=2; конечный результат: d=2, c=2
2. Префиксный инкремент и декремент (++a, --a):Сначала выполняется операция инкремента или декремента, затем вычисляется выражение.
3. Постфиксный инкремент и декремент (a++, a--):Сначала вычисляется выражение, затем выполняется операция инкремента или декремента. Пример:
Пример
Результат:
自增运算符前缀运算后a=6,x=12 自增运算符后缀运算后b=6,y=10
Операторы отношения
В следующей таблице перечислены операторы отношения, поддерживаемые Java.
В примерах в таблице целочисленная переменная A имеет значение 10, а переменная B имеет значение 20:
| Operator | Описание | Пример |
|---|---|---|
| == | Проверяет, равны ли значения двух операндов; если они равны, условие истинно. | (A == B) ложно. |
| != | Проверяет, равны ли значения двух операндов; если значения не равны, условие истинно. | (A != B) истинно. |
| > | Проверяет, больше ли значение левого операнда, чем значение правого операнда; если да, условие истинно. | (A > B) ложно. |
| < | Проверяет, меньше ли значение левого операнда, чем значение правого операнда; если да, условие истинно. | (A < B) истинно. |
| >= | Проверяет, является ли значение левого операнда большим или равным значению правого операнда; если да, условие истинно. | (A >= B) ложно. |
| <= | Проверяет, является ли значение левого операнда меньшим или равным значению правого операнда; если да, условие истинно. | (A <= B) истинно. |
Пример
Простая примерная программа ниже демонстрирует операторы отношения. Скопируйте и вставьте следующую программу на Java, сохраните её в файле Test.java, затем скомпилируйте и запустите эту программу:
Код файла Test.java:
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
Побитовые операторы
Java определяет побитовые операторы, которые применяются к целочисленному типу (int), длинному типу (long), короткому типу (short), символьному типу (char) и байтовому типу (byte) и т. д.
Побитовые операторы воздействуют на все биты и выполняют операции побитово. Предположим, a = 60, b = 13; их двоичное представление будет следующим:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011
В следующей таблице перечислены основные операции побитовых операторов, предполагая, что целочисленная переменная A имеет значение 60, а переменная B имеет значение 13:
| Operator | Описание | Пример |
|---|---|---|
| & | Если соответствующие биты оба равны 1, результат равен 1; в противном случае — 0. | (A & B) даёт 12, то есть 0000 1100 |
| | | Если соответствующие биты оба равны 0, результат равен 0; в противном случае — 1. | (A | B) даёт 61, то есть 0011 1101 |
| ^ | Если значения соответствующих битов одинаковы, результат равен 0; в противном случае — 1. | (A ^ B) даёт 49, то есть 0011 0001 |
| 〜 | Оператор побитового дополнения инвертирует каждый бит операнда, то есть 0 становится 1, а 1 становится 0. | (~A) даёт -61, то есть 1100 0011 |
| << | Оператор побитового сдвига влево. Левый операнд сдвигается влево на количество битов, указанное правым операндом. | A << 2 даёт 240, т. е. 1111 0000 |
| >> | Оператор побитового сдвига вправо. Левый операнд сдвигается вправо на количество битов, заданное правым операндом. | A >> 2 даёт 15, т. е. 1111 |
| >>> | Оператор побитового сдвига вправо с заполнением нулями. Значение левого операнда сдвигается вправо на количество битов, заданное правым операндом, а освободившиеся биты заполняются нулями. | A >>> 2 даёт 15, т. е. 0000 1111 |
Пример
Приведённая ниже простая примерная программа демонстрирует побитовые операторы. Скопируйте и вставьте следующую программу на Java, сохраните её как файл Test.java, затем скомпилируйте и запустите эту программу:
Код файла Test.java:
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
Логические операторы
В следующей таблице перечислены основные операции логических операторов, при условии, что логическая переменная A равна true, а переменная B равна false.
| Operator | Описание | Пример |
|---|---|---|
| && | Называется оператором логического И. Условие истинно тогда и только тогда, когда оба операнда истинны. | (A && B) ложно. |
| | | | Называется оператором логического ИЛИ. Если хотя бы один из двух операндов истинен, условие истинно. | (A || B) истинно. |
| ! | Называется оператором логического НЕ. Он используется для инвертирования логического состояния операнда. Если условие истинно, то оператор логического НЕ вернёт false. | !(A && B) истинно. |
Пример
Приведённая ниже простая примерная программа демонстрирует логические операторы. Скопируйте и вставьте следующую программу на Java, сохраните её как файл Test.java, затем скомпилируйте и запустите эту программу:
Пример
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
a && b = false a || b = true !(a && b) = true
Логические операторы с коротким замыканием
При использовании логического оператора AND результат истинен только тогда, когда оба операнда истинны, но если первый операнд ложен, результат обязательно ложен, и второй операнд больше не вычисляется.
Пример
Вывод:
使用短路逻辑运算符的结果为false a的结果为5
Анализ:Эта программа использует логический оператор с коротким замыканием (&&). Сначала результат a<4 определяется как false, поэтому результат b обязательно false; следовательно, вторая операция a++<10 не выполняется, поэтому значение a равно 5.
Операторы присваивания
Ниже перечислены операторы присваивания, поддерживаемые языком Java:
| Operator | Описание | Пример |
|---|---|---|
| = | Простой оператор присваивания: присваивает значение правого операнда левому операнду. | C = A + B присвоит значение A + B переменной C. |
| + = | Оператор сложения с присваиванием: складывает левый и правый операнды и присваивает результат левому операнду. | C += A эквивалентно C = C + A |
| - = | Оператор вычитания с присваиванием: вычитает правый операнд из левого операнда и присваивает результат левому операнду. | C -= A эквивалентно C = C - A |
| * = | Оператор умножения с присваиванием: он умножает левый и правый операнды и присваивает результат левому операнду. | C *= A эквивалентно C = C * A |
| / = | Оператор деления с присваиванием: он делит левый операнд на правый операнд и присваивает результат левому операнду. | C /= A, если C и A одного типа, эквивалентно C = C / A |
| (%)= | Оператор взятия остатка по модулю с присваиванием: он берёт остаток от деления левого операнда на правый и присваивает результат левому операнду. | C %= A эквивалентно C = C % A |
| << = | Оператор сдвига влево с присваиванием | C <<= 2 эквивалентно C = C << 2 |
| >> = | Оператор сдвига вправо с присваиванием | C >>= 2 эквивалентно C = C >> 2 |
| &= | Оператор побитового И с присваиванием | C &= 2 эквивалентно C = C & 2 |
| ^ = | Оператор побитового исключающего ИЛИ с присваиванием | C ^= 2 эквивалентно C = C ^ 2 |
| | = | Оператор побитового ИЛИ с присваиванием | C |= 2 эквивалентно C = C | 2 |
Пример
Следующая простая программа-пример демонстрирует операторы присваивания. Скопируйте и вставьте следующую программу на Java, сохраните её как файл Test.java, затем скомпилируйте и запустите эту программу:
Код файла Test.java:
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= 2 = 1 c &= a = 0 c ^= a = 10 c |= a = 10
Условный оператор (?:)
Условный оператор также называют тернарным оператором. Этот оператор имеет 3 операнда и должен вычислять логическое выражение. Основное назначение этого оператора — решать, какое значение следует присвоить переменной.
variable x = (expression) ? value if true : value if false
Пример
Код файла Test.java:
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
Value of b is : 30 Value of b is : 20
Оператор instanceof
Этот оператор используется для работы с экземплярами объектов и проверяет, относится ли объект к определённому типу (типу класса или типу интерфейса).
Формат использования оператора instanceof следующий:
( Object reference variable ) instanceof (class/interface type)
Если объект, на который ссылается переменная в левой части оператора, является объектом класса или интерфейса в правой части оператора, результат равен true.
Вот пример:
String name = "James"; boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
Если сравниваемый объект совместим с типом в правой части, этот оператор всё равно возвращает true.
Посмотрите на следующий пример:
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
true
Приоритет операторов Java
Когда в выражении встречается несколько операторов, какой из них выполняется первым? Это связано с вопросом приоритета операторов. В выражении с несколькими операторами разный приоритет операторов может привести к сильно различающимся итоговым результатам.
Например, (1+3) + (3+2)*2. Если сначала вычисляется сложение, имеющее наивысший приоритет, ответ равен 18; если сначала вычисляется умножение, ответ равен 14.
Другой пример: x = 7 + 3 * 2; здесь x получает значение 13, а не 20, потому что оператор умножения имеет более высокий приоритет, чем оператор сложения, поэтому сначала вычисляется 3 * 2, получается 6, а затем прибавляется 7.
В таблице ниже операторы с наивысшим приоритетом находятся вверху, а операторы с наименьшим приоритетом — внизу.
| Категория | Operator | Ассоциативность |
|---|---|---|
| Постфиксные | () [] . (оператор точка) | Слева направо |
| Унарные | expr++ expr-- | Слева направо |
| Унарные | ++expr --expr + - ~ ! | Справа налево |
| Мультипликативные | * /% | Слева направо |
| Аддитивные | + - | Слева направо |
| Сдвиг | >> >>> << | Слева направо |
| Реляционные | > >= < <= | Слева направо |
| Равенство | == != | Слева направо |
| Побитовое И | & | Слева направо |
| Побитовое XOR | ^ | Слева направо |
| Побитовое ИЛИ | | | Слева направо |
| Логическое И | && | Слева направо |
| Логическое ИЛИ | | | | Слева направо |
| Conditional | ?: | Справа налево |
| Присваивание | = + = - = * = / =%= >> = << =&= ^ = | = | Справа налево |
| Запятая | , | Слева направо |