运算符优先级及意义
运算符 | 优先级 | 意义 |
---|---|---|
() | 1 | |
[] | 1 | |
! | 2 | 非 |
+(正号),-(负号) | 2 | |
~ | 2 | 求反,计算公式:~a=-a-1 |
++ | 2 | 变量值自增1 |
-- | 2 | 变量值自减1 |
* | 3 | |
/ | 3 | |
% | 3 | 取余 |
+(加) | 4 | |
-(减) | 4 | |
<< | 5 | 左移位 |
>> | 5 | 有符号右移位 |
>>> | 5 | 无符号右移位 |
>,>=,<,<= | 6 | |
==,!= | 7 | |
& | 8 | 按位与,非短路与 |
^ | 9 | 按位异或,两个二进制位不同,则结果为1,相同则为0 |
| | 10 | 按位或,非短路或 |
&& | 11 | 短路与 |
|| | 12 | 短路或 |
?: | 13 | 根据条件给变量赋值,条件满足值为冒号前的,不满足值为冒号后的; |
= | 14 | 赋值 |
一些不常用的运算符使用方法
- <<:左移,高位抛弃,低位补零;如11(0000 1011)<<2(代表左移两位)=44(0010 1100);
- >>:有符号右移,低位抛弃,负数高位补1,正数高位补0;如-11(1111 0101,注意是计算机存储的是补码)>>2=-3(1111 1101,这里是补码,换为原码是1000 0011,也就是-3)
- >>>:无符号右移,低位抛弃,高位补0;如139(10001011)>>2=34(0010 0010)
?:
:数据类型 变量名=判断条件 ? 内容1:内容2;例如:int result=a>b?a:b;//如果a大,就将a赋值给result,b大则b赋值给result
注意事项
1.a++和++a的区别:a++是在执行完对a的操作之后,再加1,而++a是先加1之后再执行对a的操作;例如:
int a=1;
println(a++);//输出1
println(++a);//输出2
--a和a--同理
2.&和&&,|和||的区别:&和|是非短路运算符,&&和||是短路运算符;
也就是说,使用&&时,当前面一个条件为假,就不会继续判断后面一个条件;当使用&时,不管第一个条件结果如何,两个条件都需要判断;||和|也是同理。
3.==和equals()的区别
见浅谈java中==和equals()