Java支持的运算符
逻辑运算符
&,|, &&,||,!,^
位运算符
&,|,^,~ , >>,<<,>>> (了解!!!)
条件运算符
?:
扩展赋值运算符
+=,-=,*=,/=
拓展赋值运算符
a+=b 和 a=a+b 区别:
(1)a+=b 可读性稍差 编译效率高 底层自动进行类型转换
(2)a=a+b 可读性好 编译效率低 手动进行类型转换
第三点类型转换具体指的是什么?
意思说如果a、b数据类型不一致,那么在“大的数据类型赋给小的数据类型”的情境下,a+=b不需要手动写强制转换,而a=a+b需要写,比如说
byte a = 10;
int b = 20;
a += b;
a = a+b ; 会报错,应更正为:a = (byte)(a+b);
逻辑运算符
左右连接的是布尔类型的操作数
运算符 | 名称 | 规则 |
---|---|---|
& | 逻辑与 | 只要有一个操作数是false,那么结果一定是false |
&& | 短路与 | 效率高一些,只要第一个表达式是false,那么第二个表达式就不用计算了,结果一定是false |
| | 逻辑或 | 只要有一个操作数是true,那么结果一定是true |
|| | 短路或 | 效率高一些,只要第一个表达式是true,那么第二个表达式就不用计算了,结果一定是true |
! | 逻辑非 | 相反结果 |
^ | 逻辑异或 | 两个操作数相同,结果为false,不相同,结果为true |
条件运算符
格式: a?b:c
其中a是一个布尔类型的表达式,返回结果要么是true要么false,通过a的结果决定最终表达式的结果:
如果a的结果是true,那么表达式最终结果为b
如果a的结果是false,那么表达式最终结果为c
位运算符
左右连接的是具体的数值
运算符 | 名称 | 效果 |
---|---|---|
<< | 左移 | a<<n结果上 = a * 2n ,但是位运算是最快的 |
>> | 有符号右移 | 右移1位相当于除2取商 |
>>> | 无符号右移 | 也就是右移过去后左边全是用0填 |
& | 与 | 1&1才为1 |
| | 或 | 0|0才为0 |
^ | 异或 | 相反才为1 |
~ | 反 |