English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Одним из основных用途 компьютера является выполнение математических вычислений, как компьютерный язык, Java также предоставляет набор богатых операторов для манипуляции переменными. Мы можем разделить операторы на следующие группы:
Арифметические операторы
关系运算符
Битовые операторы
Логические операторы
Операторы присваивания
Другие операторы
Арифметические операторы используются в математических выражениях и выполняют ту же функцию, что и в математике. В таблице приведены все арифметические операторы.
Примеры в таблице предполагают, что значение переменной A равно 10, а значение переменной B равно 20:
Операторы | Описание | Пример |
---|---|---|
+ | Сложение - результат сложения значений, стоящих справа и слева от оператора | A + B равно 30 |
- | Вычитание - результат вычитания правого операнда из левого операнда | A – B равно -10 |
* | Умножение - результат умножения значений, стоящих справа и слева от оператора | A * B равно 200 |
/ | Деление - результат деления левого операнда на правый операнд | B / A равно 2 |
% | Оставшаяся часть - это результат деления левого операнда на правый операнд | B % A равно 0 |
++ | Увеличение на 1: значение операнда увеличивается на 1 | B++ или ++B равно 21 (подробнее см. ниже) |
-- | Уменьшение на 1: значение операнда уменьшается на 1 | B-- или --B равно 19 (подробнее см. ниже) |
Ниже приведен пример простого программного обеспечения, демонстрирующего арифметические операторы. Скопируйте и вставьте следующий Java-код в файл ArithmeticOperator.java, сохраните его, затем скомпилируйте и запустите эту программу:
class ArithmeticOperator { public static void main(String[] args) { double number1 = 12.5, number2 = 3.5, result; // использование оператора сложения result = number1 + number2; System.out.println("number1 + number2 = " + result); // использование оператора вычитания result = number1 - number2; System.out.println("number1 - number2 = " + result); // использование оператора умножения result = number1 * number2; System.out.println("number1 * number2 = " + result); // использование оператора деления result = number1 / number2; System.out.println("number1 / number2 = " + result); // использование оператора модуля result = number1 % number2; System.out.println("number1 % number2 = " + result); } }
Результат компиляции и выполнения примеров выше такой:
number1 + number2 = 16.0 number1 - number2 = 9.0 number1 * number2 = 43.75 number1 / number2 = 3.5714285714285716 number1 % number2 = 2.0
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:
运算符 | Описание | Пример |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (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:
Операторы | Описание | Пример |
---|---|---|
& | Если соответствующие позиции оба 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, демонстрирующий использование битовых операторов. Скопируйте и вставьте следующий 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
Операторы | Описание | Пример |
---|---|---|
&& | Это логический оператор и. Условие true только в том случае, если оба операнда true. | (A && B) ложно. |
| | | Это логический оператор или. Если любой из операндов true, условие true. | (A || B) истина. |
! | Это логический оператор не. Используется для инверсии логического состояния операнда. Если условие true, то логический оператор не возвращает 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
Когда используется логический оператор "и", результат будет true только в том случае, если оба операнда true, но если первый операнд false, результат будет определенно false, и в этом случае не будет выполняться вторая операция.
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:
Операторы | Описание | Пример |
---|---|---|
= | Простые операторы присваивания, присваивающие значение правого операнда левой операнде | C = A + B присвоит значению C результат выражения A + B |
+ = | Оператор присваивания сложения, который сложит левые и правые операнды и присваивает результат левого операнду | 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-код в файл AssignmentOperator.java, сохраните его, затем скомпилируйте и запустите программу:
class AssignmentOperator { public static void main(String[] args) { int number1, number2; //Присвоение значения 5 переменной number1 number1 = 5; System.out.println(number1); //Присвоение значения переменной number2 переменной number1 number2 = number1; System.out.println(number2); } }
Результат компиляции и выполнения примеров выше такой:
5 5
Оператор условия также известен как三元 оператор. У оператора есть три операнда и он должен�断 значение логического выражения. Основная функция оператора - определить, какое значение должно быть присвоено переменной.
Переменная x = (выражение) ? значение если истина : значение если ложно
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); } }
Результат компиляции и выполнения примеров выше такой:
Значение b: 30 Значение b: 20
Этот оператор используется для работы с объектами, чтобы проверить, является ли объект конкретным типом (тип класса или интерфейса).
Формат использования оператора instanceof такой:
(Object reference variable) instanceof (class/interface type)
Если объект, на который указывает переменная слева от оператора, является объектом класса или интерфейса (class/interface) справа от оператора, то результат будет true.
Вот один из примеров:
String name = "James"; boolean result = name instanceof String; // так как name является типом String, поэтому возвращает true
Если сравниваемый объект совместим с правым типом, этот оператор все еще возвращает 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
Когда несколько операторов出现在 одном выражении, кто будет выполняться первым? Это касается вопроса приоритета операторов. В выражениях с несколькими операторами различный приоритет может привести к значительным различиям в конечных результатах.
Например, (1+3) + (3+2) * 2, если выражение вычисляется по приоритету сложения, ответ будет 18, а если по приоритету умножения, ответ будет 14.
Например, x = 7 + 3 * 2; здесь x получает 13, а не 20, потому что оператор умножения имеет более высокий приоритет, чем оператор сложения, поэтому сначала вычисляется 3 * 2 = 6, а затем к нему добавляется 7.
В таблице, расположенной ниже, операторы с наивысшим приоритетом расположены в верхней части таблицы, а с наименьшим приоритетом - в нижней части.
Категория | Операторы | Связанность |
---|---|---|
Префикс | () [] . (оператор точечной арифметики) | Слева направо |
Унарные | expr++ expr-- | Слева направо |
Унарные | ++expr --expr + - ~ ! | Справа налево |
Множество | * /% | Слева направо |
Добавление | + - | Слева направо |
Сдвиг | >>> >>> << | Слева направо |
Отношение | > >= < <= | Слева направо |
Равенство | == != | Слева направо |
Битовое И | & | Слева направо |
Битовое ИЛИ без повторения | ^ | Слева направо |
Битовое ИЛИ | | | Слева направо |
Логическое И | && | Слева направо |
Логическое ИЛИ | | | | Слева направо |
Условие | ?: | Справа налево |
Ассигнование | = + = - = * = / =%= >> = << =&= ^ = | = | Справа налево |
Запятая | , | Слева направо |