最全面的运算符知识

188 阅读3分钟

运算符

运算符:是一种特殊符号,用以表示数据的运算、赋值和比较。

运算符按照操作数的数量可以分为单目运算符、双目运算符和三目运算符

运算符分类:

  1. 算术运算符
  2. 赋值运算符
  3. 逻辑运算符
  4. 关系运算

一、算术运算符

一元运算符

运算符名称说明例子
-取反符号取反运算b=-a
++自加先取值再加一,或先加a++ 或 ++a
++a 一再取值 --自减先取值再减一,或先减a-- 或 --a

二元运算符

运算符名称说明例子
+求 a 加 b 的和,还可用于 String 类型,进行字符串连续操作a+b
+-求 a 减 b 的差a-b
b*求 a 乘以 b 的积a*b
/求 a 除以 b 的商a/b
%取余求 a 除以 b 的余数a%b

二、赋值运算符

​ 赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。

运算符含义实例结果
+=将该运算符左边的数值加上右边的数值,其结果赋值给左边变量本身int a=3; a+=2;a=5
-=将该运算符左边的数值减去右边的数值,其结果赋值给左边变量本身int a=3; a-=2;a=1
*=将该运算符左边的数值乘以右边的数值,其结果赋值给左边变量本身int a=3; a*=2;a=6
/=将该运算符左边的数值整除右边的数值,其结果赋值给左边变量本身int a=3; a/=3;a=1
%=将该运算符左边的数值除以右边的数值后取余,其结果赋值给左边变量本身int a=3; a%=2;a=1

三、逻辑运算符

​ 逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。

运算符用法含义说明实例结果
&&a&&b短路与ab全为true时,计算结果为true,否则为false2>1&&3<4true
||a||b短路或ab全为false时,计算结果为false,否则为true2 <1||3>4false
!!a逻辑非a为true时,值为false,a为false时,值为true!(2>4)true
|a|b逻辑或ab全为false时,计算结果为false,否则为true1>2|3>5false
 &a&b逻辑与ab全为true时,计算结果为true,否则为false1<2&3<5true

区分点:

  1. && 与 & 区别:如果 a 为 false,则不计算 b(因为不论 b 为何值,结果都为 false)
  2. || 与 | 区别:如果 a 为 true,则不计算 b(因为不论 b 为何值,结果都为 true)

注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。

四、关系运算符

​ 关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。

运算符含义说明实例结果
大于运算符只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回true。2>3false
>=大于或等于运算符只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。4>=2true
<小于运算符只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回true。2<3true
<=小于或等于运算符只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true。4<=2false
==相等运算符如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 Java也支持两个 boolean类型的值进行比较。4==4 97=='a' 5.0==5 true==falsetrue true true false
!=不相等运算符如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。4!=2true

五、位运算符

​ 位运算(bitwise operators)是直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和byte。

位逻辑运算符

运算符含义实例结果
&按位进行与运算(AND)4 & 54
|按位进行或运算(OR)4 | 55
按位进行异或运算(XOR)4 ^ 51
~按位进行取反运算(NOT)~ 4-5

位移运算符

运算符含义实例结果
>>右移位运算符8»14
<<左移位运算符9«236

六、复合位赋值运算符

​ 所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。表 3 列出了组合后的复合位赋值运算符。

运算符含义实例结果
&=按位与赋值num1 &=num2等价于num1=num1&num2
|=按位或赋值num1 |=num2等价于num1=num1|num2
^=按位异或赋值num1 ^=num2等价于num1=num1^num2
-=按位取反赋值num1 -=num2等价于num1=num1-num2
<<=按位左移赋值num1 <<=num2等价于num1=num1<<num2
>>=按位右移赋值num1 >>=num2等价于num1=num1>>num2

七、三元运算符

​ Java 提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的 if-then-else 语句。条件运算符的符号表示为“?:”,使用该运算符时需要有三个操作数,因此称其为三目运算符。使用条件运算符的一般语法结构为:

public static void main(String[] args){
        int a=10;
        int b=20;
        int x;

        x=(a>b)?a:b;
        System.out.println(x);
   }

67713351915

八、运算符优先级

​ Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。

优先级运算符结合性
1()、[]、{}从左向右(均为此)
2!、+、-、~、++、--
3*、/、%
4+、-
5«、»、>>>
6<、<=、>、>=、instanceof
7==、!=
8&
9
10|
11&&
12||
13?:
14=、+=、-=、*=、/=、&=、|=、^=、