运算符
自增和自减运算符
- ++ :操作数值型变量,++ 放操作数左边,操作数自身加 1,返回加 1 后的结果;++ 放操作数右边,操作数自身加 1, 返回加 1 前的结果;
- -- :操作数值型变量,-- 放操作数左边,操作数自身减 1,返回减 1 后的结果;-- 放操作数右边,操作数自身减 1, 返回减 1 前的结果;
int c = 5; int d = ++c; System.out.println(a); //6 System.out.println(d); //6 int a = 5; int b = a++; System.out.println(a); //6 System.out.println(b); //5
位运算符
- & :按位与
- | :按位或
- ~ :按位非(键盘数字 1 左边键)
- ^ :按位异或
- << :左移运算符
>>
:右移运算符>>>
:无符号右移运算符
需要记住一点,位运算操作的是数值在计算机存储的二进制码(补码)
System.out.println(5 & 9); //1 System.out.println(5 | 9); //13 System.out.println(~-5); //4 System.out.println(5^9); //12
左移运算符是将操作数的二进制码整体左移指定位数,左移后右边空出来的位以 0 填充,左移 n 位,相当于乘以 2 的 n 次方。
System.out.println(5 << 2); //20 System.out.println(-5 << 2); //-20
右移运算符有两个:>>>
和 >>
:
对于
>>
运算符而言,将操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位填充,即如果操作数原来是正数,则左边补 0;如果操作数是负数,则左边补 1。因此,右移 n 位,相当于除以 2 的 n 次方。>>>
是无符号右移运算符,将操作数的二进制码右移指定位数后,左边空出来的位全补 0 。
System.out.println(-5 >> 2); //-2 System.out.println(-5 >>> 2); //1073741822
进行移位运算的规则:
- 对于 byte、short 或 char 类型的操作数会先自动类型转换为 int 类型后再移位;
- 对于 int 类型的整数移位
a>>b
,当 b > 32时,系统先用 b 对 32 求余(因为 int 类型只有 32 位),得到的结果才是真正移位的位数; - 对于 long 类型的整数移位
a>>b
,当 b > 64时,先用 b 对 64 求余,得到的结果才是真正移位的位数。
instanceof
instanceof 是一个二元运算符,a instanceof B
判断 a 是否为 B 的实例,B 是类或者接口、父类或者父接口,即要求 B c = a
成立,最终返回 boolean
类型值。
public static void main(String[] args) { Double obj = 1.0; //obj是Double的实现类 System.out.println(obj instanceof Double); //true //obj是Object的子类的实现类 System.out.println(obj instanceof Object); //true }
运算符优先级
运算符说明 | Java 运算符 |
---|---|
分隔符 | . [] () {} , ; |
单目运算符 | ++ -- ~ ! |
强制类型转换运算符 | (type) |
乘法/除法/求余 | * / % |
加法/减法 | + - |
移位运算符 | << >> >>> |
关系运算符 | < <= >= > instanceof |
等价运算符 | == != |
按位与 | & |
按位异或 | ^ |
按位或 | | |
条件与 | && |
条件或 | || |
三目运算符 | ? : |
赋值 | = += -= *= /= &= |= ^= %= <<= >>= >>>= |
记住 && 和 || 优先级顺序技巧:将 && 看成一般算式的乘法,一般算式中乘法优先级最高,所以 && 优先级比 || 高。