算术运算符
- 加:+
- 减:-
- 乘:*
- 除:/
- 整数与整数相除,结果还是整数,即只保留整数部分
- 模/取余:%
- 结果的正负号只看被除数
- 正号:+
- 负号:-
- 自增:++
- 单独运算:++在前,先自增再取值到操作数栈
- 复合运算:
- ++在前,先自增再取值到操作数栈
- ++在后,先取值放到操作数栈然后变量自己自增
- 自减:--
- 类同于自增
赋值运算符
- 基本赋值运算符:=
- 扩展赋值运算符:+=,-=,*=,/=,%=,>>=,<<=,&=…
- 会用=左边的变量的值,与=右边的表达式一起做运算,并且如果最后计算结果的类型比左边的变量的类型大了,会隐式的发生强制类型转换
注意:无论是基本复制运算符还是扩展赋值运算符都是最后算,并且是把右边的计算结果最后赋值给左边的变量,即左边一定是一个变量
1 byte b1 = 1; 2 byte b2 = 2; 3 byte b3 = b1 + b2;//编译错 4 5 b1 += b2;//编译通过
关系运算符/比较运算符
- 大于:>
- 小于:<
- 大于等于:>=
- 小于等于:<=
- 等于:==
- 不等于:!=
注意:所有比较运算符的结果都是true/false,所以比较运算符通常用作条件判断
逻辑运算符
- 逻辑与:&
- true & true,结果是true
- true & false,结果是false
- false & true,结果是false
- false & false,结果是false
- 只有两边都是true,结果才为true
- 逻辑或:|
- true | true,结果是true
- true | false,结果是true
- false | true,结果是true
- false | false,结果是false
- 只要两边有一个为true,结果就为true
- 逻辑非:!
- !true为false
- !false为true
- 逻辑异或:^
- true ^ true,结果是false
- true ^ false,结果是true
- false ^ true,结果是true
- false ^ false,结果是false
- 两边相同为false,不同为true
- 短路与:&&
- true && true,结果是true
- true && false,结果是false
- false && true,结果是false
- false && false,结果是false
- 只有两边都是true,结果才为true,但是当左边为false时,右边不看
- 短路或:||
- true || true,结果是true
- true || false,结果是true
- false || true,结果是true
- false || false,结果是false
- 只要两边有一个为true,结果就为true,但是当左边为true时,右边不看
注意:逻辑运算符的操作数必须是boolean类型
条件运算符/三元运算符
格式:条件表达式 ? 结果表达式1 : 结果表达式2
当条件表达式为true时,就取结果表达式1的值,否则取结果表达式2的值
位运算符
- 左移:<<
- 快速算的口诀:乘以2的n次方
- 右移:>>
- 快速算的口诀:除以2的n次方
- 无符号右移:>>>
- 正数:和右移一样
- 负数:变为正数
- 按位与:&
- 1&1结果为1
- 1&0结果为0
- 0&1结果为0
- 0&0结果为0
- 按位或:|
- 1|1结果为1
- 1|0结果为1
- 0|1结果为1
- 0|0结果为0
- 按位异或:^
- 1^1结果为0
- 1^0结果为1
- 0^1结果为1
- 0^0结果为0
- 按位取反:~
- ~1为0
- ~0为1
注意:
(1)当左移、右移、无符号右移要移动的位数超过数据类型的总位数,会出现循环,移的位数没有超过数据类型的总位数时,不会出现循环。byte,short,char在移位时,按照int类型处理
(2)在补码的基础上计算
运算符优先级
大体上:()等>算术运算符>位运算符>比较运算符>逻辑运算符>条件运算符>赋值运算符
自己写的原则:尽量不要太复杂,保证可读性