1.算术运算符
1.int / int
结果还是
int
类型,而且会向下取整(舍弃小数点)要想得到数学中的结果,可以使用double
2.做除法/和取模%时,右操作数不能为0
3.可以对小数求余数,即对double类型取模 11.5%2.0==1.5
4.两侧操作数类型不一致时,自动向类型大的提升
2.关系运算符
关系运算符主要有六个:== != < > <= >= ,计算结果都是 true 或 false
注意:当需要多次判断时,不能连着写,比如:
3 < a < 5
,原因很简单 先判断3 < a 是true或false,这不能和后面的5比较。
3.逻辑运算符(重点)
主要有三个:&& || !,运算结果都是boolean类型
3.1逻辑与 ( &&)
格式:布尔表达式1 && 布尔表达式2 ,遵循下图,即 有一个假就是假
3.2逻辑或 ( || )
格式同上,简记为 有一个真就是真
3.3逻辑非( !)
简记为 真变假 假变真
3.4短路
1.对于 && 。左侧表达式为false,结果一定为false,无需计算右侧表达式
2.对于 | | 。 左侧表达式为true,结果一定为true,无需计算右侧表达式
3.& 和 | 如果表达式结果为 boolean类型时, 也表示逻辑运算。 但与 && || 相比, 它们不支持短路求值.
4.位运算符
位运算符主要有四个
:
& | ~ ^ 位运算符表示按二进制位运算
1.按位与
& :两个二进制同为 1 ,结果为 1,否则结果为 0
2.按位或
| :两个二进制同为 0 ,结果为 0,否则结果为 1
注意
:
当
&
和
|
的操作数为整数
(int, short, long, byte)
的时候
,
表示按位运算
,
当操作数为
boolean
的时候
,
表示逻辑运算.
3.按位异或 ^ :
找不同,用 1 标记,所以同为 0,异为 1
找不同,也就可以得出两个结论
![](https://img-blog.csdnimg.cn/direct/cb24d5bc464e44a4b66d40be82eea911.png)
4.按位取反 ~ :1变0,0变1
![](https://img-blog.csdnimg.cn/direct/1c6aad3976144b9c88189e3dec37fa0b.png)
5.移位运算符
移位运算符有三个
:
<< >> >>>
,都是二元运算符,且都是按照二进制比特位来运算的。
1.
左移
<<
:
最左侧位不要了
,
最右侧补
0,
相当于
乘法
n * 2 ^ x(x为移动的位数)
注意:向左移位时,丢弃的是符号位,因此正数左移可能会变成负数
2.
右移
>>
:
最右侧位不要了
,
最左侧补符号位
(
正数补
0,
负数补 1),相当于除法 n / 2 ^ x
3.
无符号右移
>>>:
最右侧位不要了
,
最左侧补
0
由于计算机计算移位de效率高于计算乘除,
当某个代码正好乘除
2
的
N
次方的时候可以用移位运算代替,
移动负数位或者移位位数过大都没有意义.
6.条件运算符
只有一个: 布尔表达式 1 ?表达式 2 :表达式 3 ,
也是Java中唯一的一个三目运算符,是条件判断语句的简化写法。
![](https://img-blog.csdnimg.cn/direct/24747b14c28e4d4e935c1128fc48dc24.png)
面试题:
原因:
7.运算符的优先级
运算符之间是有
优先级
的
.
具体的规则我们
不必记忆
.
在可能存在歧义的代码中加上括号即可