可以将大部分Java运算符划分为四组:算术运算符、逻辑运算符、关系运算符以及位运算符。
算术运算符
运算符 | 结 果 |
+ | 加法(也是一元加号) |
- | 减法(也是一元负号) |
* | 乘法 |
/ | 除法 |
% | 求模/取余 |
+= | 加并赋值 |
-= | 减并赋值 |
*= | 乘并赋值 |
/= | 除并赋值 |
%= | 求模并赋值 |
++ | 自增 |
-- | 自减 |
注意:
1.整数除以整数结果还是整数
2.求模运算符%,返回除法操作的余数。它既可以用于浮点数也可以用于整数。
表达式:
由操作数与运算符组成,有具体值(注意数据类型)
表达式中的类型提升规则:
表达式的类型会自动提升为所有操作数的最大类型。
对于操作数全为非long类型整数的表达式,其类型会自动提升为int。
逻辑运算符
布尔逻辑运算符,只能操作boolean型操作数。
运算符 | 结 果 |
&& | 逻辑与(短路形式) |
|| | 逻辑或(短路形式) |
^ | 逻辑异或 |
! | 逻辑一元非 |
& | 逻辑与 |
| | 逻辑或 |
布尔逻辑运算规则:
操作数 | 逻辑运算及结果 | ||||
A | B | A || B | A && B | !A | A ^ B |
false | false | false | false | true | false |
true | false | true | false | false | true |
false | true | true | false | true | true |
true | true | true | true | false | false |
运算规则说明:
对于||,只要有一个操作数为true,则结果为true;
对于&&,只要有一个操作数为false,则结果为false。
对于^,两个操作数不同,则结果为true,否则结果为false。
注意:&&和||,
这两个运算符是所谓短路形式的逻辑运算符。假如单独根据左操作数就能确定表达式的结果,那么就不会计算右操作数的值。
三目运算符(三元)
语法:表达式1?表达式2:表达式3
表达式1必须是boolean类型的表达式
如果结果为true,那么取表达式2的结果
如果结果为false,那么取表达式3的结果
关系运算符
运算符 | 结果 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
位运算符
运算符 | 结果 |
---|---|
~ | 按位取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
>> | 向右移动(有符号) |
>>> | 向右移动(无符号) |
<< | 向左移动 |
1.判断 &,|,^ 是逻辑运算符还是位运算符,主要看其左右连接的是什么。连接布尔型操作数的是逻辑运算符,连接具体数值的是位运算符。
2.移动时计算机会将输入的十进制数转化为二进制进行计算。
<<
public class Testx {
public static void main(String[] args) {
System.out.println(3<<2); //输出3左移两位的结果 3*2*2=12
}
}
3: 00000000 00000000 00000000 00000011
12: 00000000 00000000 00000000 00001100
>>
public class Testx {
public static void main(String[] args) {
System.out.println(6>>2); //输出6右移两位的结果 6/2/2=1
}
}
6: 00000000 00000000 00000000 00000110
1:00000000 00000000 00000000 00000001
public class Testx {
public static void main(String[] args) {
System.out.println(-6>>2); //输出-6右移两位的结果
}
}
-6: 11111111 11111111 11111111 11111010
-2:11111111 11111111 11111111 11111110
>>>
ublic class Testx {
public static void main(String[] args) {
System.out.println(-6>>>2); //输出-6无符号右移两位的结果
}
-6: 11111111 11111111 11111111 11111010
1073741822:00111111 11111111 11111111 11111110
大概顺序:算术运算符>移位运算符>关系运算符>逻辑运算符>赋值运算符
圆括号会提升其内部操作数的优先级。为了得到所期望的结果,这通常是必需的。圆括号(不管是否冗余)不会降低程序的性能。