运算符的分类
算术运算符
注意:
- 取模时,模数符号只与被模数有关
- 乘除可以调换的情况下,建议先乘后除
- 前++后运算赋值,先对自身进行加一。后++先运算赋值,然后再对自身加一。前 - - 和后 - - 同理
赋值运算符
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
= | += | -= | *= | /= |
注意:
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。支持连续赋值。
- a += 2 可以理解为a = a + 2 ,但是二者并不相同。例如,byte a = 1;执行a = a + 2 时就会因为数据类型问题,导致编译不通过。但是a += 2不会出现这个问题
比较运算符
注意:
- 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
- 比较运算符“==”不能误写成“=”
逻辑运算符
逻辑与 | 逻辑或 | 逻辑非 | 短路与 | 短路或 | 逻辑异或 |
---|---|---|---|---|---|
& | | | ! | && | || | ^ |
运算结果
注意:
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
- &(逻辑与)和&&(短路与)的区别:简单理解,短路与较为智能,当可以判断结果时,就不会再进行运算符后面的计算,比如,当短路与左边的结果为假时,就可以知道最终的结果必然为假,右边将直接跳过运算,而逻辑与则会计算完成俩边的式子。同理,逻辑或与短路或的区别也是如此。
- 异或运算法则:相同则假,相异则真。
位运算符

注意:
- 位运算符都是对底层的二进制补码进行的比较移位等运算,了解它的补位规则就可以得出正确的运算结果
- 正数右移 (>>)最高位用0补,负数右移 (>>),最高位用1补,无符号右移 (>>>) 最高位不分正负,都用0补
- 左移,在一定范围内,左移一位就乘以2
- 右移,在一定范围内,右移一位就除以2
三元运算符
注意:
- 表达式1和表达式2的返回结果需要是同种数据类型,不同的话可以自动类型提升成相同的数据类型也是可以的
- 可以用if-else替代三元运算符,如果都可以使用的情况下,建议使用三元运算符提高效率
- 三元运算符可以嵌套使用,但是不建议
- 三元运算符与if-else的联系与区别
- 三元运算符可以简化if-else语句
- 三元运算符要求必须返回一个结果
- if后面的代码块可以有多个语句
运算符的优先级
- 只有单目运算符(第2行),三元运算符(第 - 4行),赋值运算符(最后3行)是从右往左(R --> L)运算的
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行。
拓展
单目运算符:指运算所需变量为一个的运算符,即在运算当中只有一个操作数,又叫一元运算符,其中有逻辑非运算符:!、按位取反运算符:~、自增自减运算符:++, --等