一、按照操作数个数的分类
1、一元运算符:操作数一个 +a
例如:正号+、负号-、自增++、自减–、逻辑非!、按位取反~
2、二元运算符:操作数两个 a > b
例如:加+、减-、乘*、除/、模%、大于>、小于<、大等于>=、小等于>=、
赋值(=、+=、-=、*=、/=、%=、>>=、<<=)、逻辑与(&)、逻辑或(|)、逻辑异或( ^ )、
短路与(&&)、短路或(||)、左移(<<)、右移(>>)、无符号右移(>>>)、
按位与(&)、按位或(|)、按位异或( ^ )
3、三元运算符:操作数三个 max ? x : y
例如: ? :
二、运算符分类
1、算术运算符
加 +
减 -
乘 *
除 /
特殊:整数/整数,结果只保留整数部分
取余 %
特殊:只看被模数的正负号 被模数%模数
正号:+
负号:-
自增:++
自减:–
但是++在前还是在后,对于整个表达式的计算来说是不一样的。
++在前,先自增,然后取自增后变量的值,
++在后,先取变量的值,然后变量自增。
2、赋值运算符
(1)基本的赋值运算符:=
赋值操作:把“=”右边的常量、变量中值、表达式计算的值赋给“=”左边的变量
运算顺序:把“=”右边的整个表达式先算完,才赋值
(2)扩展的赋值运算符:+=、-=、*=、/=、%=
*注意:所有的赋值运算符的=左边一定是个变量
扩展赋值运算=右边的计算结果的类型如果比左边变量的数据类型大的话,会强制类型转换,所以结果可能会有风险:溢出或损失精度
扩展赋值运算符的计算:①赋值最后算,②加载数据的顺序时把左边的变量的值先加载,再去和右边的表达式进行计算
int i=1;
int j=5;
j *= i++ + j;
/*
javap -c 查看
j *= i++ + j;等价于j=j*(i++ + j)
第一步:先把j=5放进操作数栈
i++:先i=1,后i=2,把2放进操作数栈
1+j=1+5=6
j *= 6 等价于 j = j * 6;
j = j * 6 = 5*6=30
*/*
3、比较运算符
大于 >
小于 <
大等于 >=
小等于 <=
等于 ==(比较) =(赋值)
不等于 !=
比较运算符的最后结果只有两种:ture、false
所以比较运算符可以用来作为:判断条件、逻辑运算符的操作数
4、逻辑运算符
逻辑运算符的操作数必须是布尔值,结果也是布尔值
逻辑与:&
类似:且,有假即假
true & true=true
true & false=false
false & true=false
false & false=false
逻辑或:|
类似:或,有真为真
true | true=true
true | false=true
false | true=true
false | false=false
逻辑非:!
类似:取反,
!ture=false
!false=true
逻辑异或:^
类似:求不同,不同为真
true ^ true=false
true ^ false=true
false ^ true=true
false ^ false=false
短路与:&&
结果:和&一样
运算规则:如果&&的左边是false,右边就不看了,结果就是false
true & true=true
true & false=false
false & ?=false
短路或:||
结果:和|一样
运算规则:如果||的左边是true,右边就不看了,结果就是true
true | ? =true
false | true =true
false | false =false
5、条件运算符
条件运算符是唯一的三元运算符,所以也叫三元运算符
语法格式:条件表达式 ? 结果表达式1 : 结果表达式2
整个表达式的结果:当条件表达式为true时,就取结果表达式1的值,否则就取结果表达式2的值
代码示例:
①布尔类型
boolean marry = false;
System.out.println(marry ? "已婚" : "未婚");
②求最值;
int x = 4;
int y = 2;
int max = x>=y ? x : y;
/*
等价于:
if(x>=y){
max = x;
}else{
max = y;
}
*/
System.out.println(max);
6、位运算符
左移:<<
- 运算规则:<<几位,就乘以2的几次方
- 二进制补码左移几位,右边补0
右移:>>
-
运算规则:>>几位,就除以2的几次方
-
二进制补码右移几位,左边补0或1,看最高位
无符号右移:>>>
- 运算规则:二进制补码右移几位,左边补0,对于负数来说,移完,变正数
按位与:& 有0为0
1&1=1
1&0=0
0&1=0
0&0=0
按位或:| ,有1为1
1&1=1
1&0=1
0&1=1
0&0=0
按位异或:^ ,不同为1,相同为0
1^1=0
1^0=1
0^1=1
0^0=0
按位取反:~ ,一元运算符
~1=0
~0=1
如何区分 &, |, ^ 是逻辑运算符还是位运算符?
如果操作数是boolean类型,就是逻辑运算符
如果操作数是整数,那么就位运算符。
三、运算符优先级
记住优先级不容易,要遵循原则:
1、表达式不要太复杂,可以分为多行
2、如果要混合运算,先算的用()
四、运算符说明
1、算术运算符
数字和单个字符可以使用算术运算符。
其中+用于字符串时,表示拼接。
2、赋值运算符
右边的常量值、表达式的值、变量的值的类型必须与左边的变量一致或兼容(可以实现自动类型转换)或使用强制类型转换可以成功。
3、比较运算符
其他的比较运算符都是只能用于8种基本数据类型。
其中的==和!=可以用于引用数据类型的比较,用于比较对象的地址。
4、逻辑运算符
逻辑运算符的操作数必须是boolean值
5、条件运算符
?前面必须是条件,必须是boolean值
结果表达式1和结果表达式2要保持类型一致或兼容
6、位运算符
一般用于整数系列
以上运算符都是针对基本数据类型设计的。
能够用于引用数据类型只有基本的赋值运算符= ,和比较运算符中的==和!=。
其中字符串类型还有一个+ ,表示拼接。