运算符
运算符:是一种特殊符号,用以表示数据的运算、赋值和比较。
运算符按照操作数的数量可以分为单目运算符、双目运算符和三目运算符
运算符分类:
算术运算符
赋值运算符
逻辑运算符
关系运算
一、算术运算符
一元运算符
运算符 | 名称 | 说明 | 例子 |
- | 取反符号 | 取反运算 | 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,否则为false | 2>1&&3<4 | true |
|| | a||b | 短路或 | ab全为false时,计算结果为false,否则为true | 2 <1||3>4 | false |
! | !a | 逻辑非 | a为true时,值为false,a为false时,值为true | !(2>4) | true |
| | a|b | 逻辑或 | ab全为false时,计算结果为false,否则为true | 1>2|3>5 | false |
& | a&b | 逻辑与 | ab全为true时,计算结果为true,否则为false | 1<2&3<5 | true |
区分点:
&& 与 & 区别:如果 a 为 false,则不计算 b(因为不论 b 为何值,结果都为 false)
|| 与 | 区别:如果 a 为 true,则不计算 b(因为不论 b 为何值,结果都为 true)
注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。
四、关系运算符
关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
运算符 | 含义 | 说明 | 实例 | 结果 |
> | 大于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回true。 | 2>3 | false |
>= | 大于或等于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。 | 4>=2 | true |
< | 小于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回true。 | 2<3 | true |
<= | 小于或等于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true。 | 4<=2 | false |
== | 相等运算符 | 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 Java也支持两个 boolean类型的值进行比较。 | 4==4 97=='a' 5.0==5 true==false | true true true false |
!= | 不相等运算符 | 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 | 4!=2 | true |
五、位运算符
位运算(bitwise operators)是直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和byte。
位逻辑运算符
运算符 | 含义 | 实例 | 结果 |
& | 按位进行与运算(AND) | 4 & 5 | 4 |
| | 按位进行或运算(OR) | 4 | 5 | 5 |
^ | 按位进行异或运算(XOR) | 4 ^ 5 | 1 |
~ | 按位进行取反运算(NOT) | ~ 4 | -5 |
位移运算符
运算符 | 含义 | 实例 | 结果 |
>> | 右移位运算符 | 8»1 | 4 |
<< | 左移位运算符 | 9«2 | 36 |
六、复合位赋值运算符
所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。表 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);
}

八、运算符优先级
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。
优先级 | 运算符 | 结合性 |
1 | ()、[]、{} | 从左向右(均为此) |
2 | !、+、-、~、++、-- | |
3 | *、/、% | |
4 | +、- | |
5 | «、»、>>> | |
6 | <、<=、>、>=、instanceof | |
7 | ==、!= | |
8 | & | |
9 | ^ | |
10 | | | |
11 | && | |
12 | || | |
13 | ?: | |
14 | =、+=、-=、*=、/=、&=、|=、^=、 |