Операторы 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, затем скомпилируйте и запустите эту программу:

Пример

public class Test { public static void main(String[] args) { int a = 10; int b = 20; int c = 25; int d = 25; System.out.println("a + b = " + (a + b) ); System.out.println("a - b = " + (a - b) ); System.out.println("a * b = " + (a * b) ); System.out.println("b / a = " + (b / a) ); System.out.println("b % a = " + (b % a) ); System.out.println("c % a = " + (c % a) ); System.out.println("a++ = " + (a++) ); System.out.println("a-- = " + (a--) ); //Посмотрите разницу между d++ и ++d System.out.println("d++ = " + (d++) ); System.out.println("++d = " + (++d) ); } }

Запустить пример »

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

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. Операторы инкремента (++) и декремента (--)Это специальные арифметические операторы. В то время как арифметические операторы требуют двух операндов для выполнения операции, операторы инкремента и декремента работают с одним операндом.

Пример

public class selfAddMinus{ public static void main(String[] args){ int a = 3;//Определите переменную; int b = ++a;//Операция инкремента int c = 3; int d = --c;//Операция декремента System.out.println("Значение после операции инкремента равно"+b); System.out.println("Значение после операции декремента равно"+d); } }

Результат:

进行自增运算后的值等于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--):Сначала вычисляется выражение, затем выполняется операция инкремента или декремента. Пример:

Пример

public class selfAddMinus{ public static void main(String[] args){ int a = 5;//Определите переменную; int b = 5; int x = 2*++a; int y = 2*b++; System.out.println("После префиксного оператора инкремента, a="+a+",x="+x); System.out.println("После постфиксного оператора инкремента, b="+b+",y="+y); } }

Результат:

自增运算符前缀运算后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:

public class Test { public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a == b = " + (a == b) ); System.out.println("a != b = " + (a != b) ); System.out.println("a > b = " + (a > b) ); System.out.println("a < b = " + (a < b) ); System.out.println("b >= a = " + (b >= a) ); System.out.println("b <= a = " + (b <= a) ); } }

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

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:

public class Test {   public static void main(String[] args) {     int a = 60; /* 60 = 0011 1100 */       int b = 13; /* 13 = 0000 1101 */      int c = 0;      c = a & b;       /* 12 = 0000 1100 */      System.out.println("a & b = " + c );      c = a | b;       /* 61 = 0011 1101 */      System.out.println("a | b = " + c );      c = a ^ b;       /* 49 = 0011 0001 */      System.out.println("a ^ b = " + c );      c = ~a;          /*-61 = 1100 0011 */      System.out.println("~a = " + c );      c = a << 2;     /* 240 = 1111 0000 */      System.out.println("a << 2 = " + c );      c = a >> 2;     /* 15 = 1111 */      System.out.println("a >> 2  = " + c );       c = a >>> 2;     /* 15 = 0000 1111 */      System.out.println("a >>> 2 = " + c );   } } 

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

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, затем скомпилируйте и запустите эту программу:

Пример

public class Test { public static void main(String[] args) { boolean a = true; boolean b = false; System.out.println("a && b = " + (a&&b)); System.out.println("a || b = " + (a||b) ); System.out.println("!(a && b) = " + !(a && b)); } }

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

a && b = false
a || b = true
!(a && b) = true

Логические операторы с коротким замыканием

При использовании логического оператора AND результат истинен только тогда, когда оба операнда истинны, но если первый операнд ложен, результат обязательно ложен, и второй операнд больше не вычисляется.

Пример

public class LuoJi{ public static void main(String[] args){ int a = 5;//Определите переменную; boolean b = (a<4)&&(a++<10); System.out.println("Результат использования логического оператора с коротким замыканием:"+b); System.out.println("Результат a:"+a); } }

Вывод:

使用短路逻辑运算符的结果为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:

public class Test { public static void main(String[] args) { int a = 10; int b = 20; int c = 0; c = a + b; System.out.println("c = a + b = " + c ); c += a ; System.out.println("c += a  = " + c ); c -= a ; System.out.println("c -= a = " + c ); c *= a ; System.out.println("c *= a = " + c ); a = 10; c = 15; c /= a ; System.out.println("c /= a = " + c ); a = 10; c = 15; c %= a ; System.out.println("c %= a  = " + c ); c <<= 2 ; System.out.println("c <<= 2 = " + c ); c >>= 2 ; System.out.println("c >>= 2 = " + c ); c >>= 2 ; System.out.println("c >>= 2 = " + c ); c &= a ; System.out.println("c &= a  = " + c ); c ^= a ; System.out.println("c ^= a   = " + c ); c |= a ; System.out.println("c |= a   = " + c ); } }

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

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:

public class Test { public static void main(String[] args){ int a , b; a = 10; //Если a равно 1, установите b в 20; иначе установите его в 30. b = (a == 1) ? 20 : 30; System.out.println( "Значение b равно: " + b ); //Если a равно 10, установите b в 20; иначе установите его в 30. b = (a == 10) ? 20 : 30; System.out.println( "Значение b равно: " + b ); } }

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

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.

Посмотрите на следующий пример:

class Vehicle {} public class Car extends Vehicle { public static void main(String[] args){ Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result); } }

Результат компиляции и запуска приведенного выше примера выглядит следующим образом:

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 ?: Справа налево
Присваивание = + = - = * = / =%= >> = << =&= ^ = | = Справа налево
Запятая , Слева направо
Другие расширения