[11] 算数运算符
引用类型之间的比较大多是通过方法来进行的,所以大部分的运算符还是针对基本数据类型。按照功能划分,Java中的运算符可以分为四类:算术运算符、位运算符、比较运算符和逻辑运算符。
1、算术运算符
- 单目:表示可以对一个变量进行操作
- 双目:表示对两个变量进行操作
- 三目:需要三个操作数进行运算
运算符类型 | 符号 | 含义 | 示例 |
单目 | + | 取正 | |
单目 | - | 取负 | |
单目 | ++ | 自增1 | |
单目 | -- | 自减1 | |
双目 | + | 相加 | |
双目 | - | 相减 | |
双目 | * | 相乘 | |
双目 | / | 相除 | |
双目 | % | 取余 | 10%3 --> 1 |
三目 | 表达式 ? 如果为真的值 : 如果为假的值 | 10 > 3 ? 1 : 0 --> 1 |
注意:
- 自加++和自减--的位置对返回给表达式的值是有影响的,加号在前表先取值再增加,加号在后表先增加再取值
- 如 有x和y为1,那么 a = x++ 为1,而 b = ++y 则为2
2、位运算符
位运算符,顾名思义,相当于针对的是二进制下的运算。
符号 | 含义 | 解释 | 示例 |
& | 与 | 全1才1,有0则0 | |
| | 或 | 有1则1,全0才0 | |
~ | 非 | 1变成0,0变成1 | |
^ | 异或 | 不同为1,相同为0 | int a=15, b=2; a^b --> 0000 1101 --> 13 |
<< | 位左移 | 左移位,低位处补0 | |
>> | 位右移 | 右移位,若正数则高位补0,负数则高位全补1 | int a=8,c; c=a>>2 --> 0000 1000 --> 0000 0010 |
>>> | 无符号右移 | 无论正负数,高位均补0 |
注意:
- 任何数异或它本身为0;任何数异或0是它本身
3、比较运算符
符号 | 含义 | 备注 |
== | 是否相等 | 可以比较引用数据类型 |
!= | 是否不等 | 可以比较引用数据类型 |
< | 是否小于 | |
> | 是否大于 | |
<= | 是否小于等于 | |
>= | 是否大于等于 |
注意:
- 比较运算符返回的是布尔值,true或false
- 除了 == 和 != ,其他都只能比较基本数据类型
- == 和 != 比较对象是比较的虚地址(即是否指向同一个引用)
4、逻辑运算符
与或非的运算和位运算符中的与或非使用类似,但是并非判断1和0,而是连接两个boolean值。
符号 | 含义 | 解释 | 示例 |
& | 与 | 全真才真,有假则假 | |
&& | 短路与 | ||
| | 或 | 有真则真,全假才假 | |
|| | 短路或 | ||
! | 非 | 真变假,假变真 | |
^ | 异或 | 不同为真,相同为假 | true ^ false --> true; true ^ true --> false |
注意:
- &&和&结果是相同的,对短路与&&来说,只要左边表达式为false右边则不参与运算,直接返回false
- 实际上多用&&和||