算术运算符
+ - *
/
除
得到的是商
%
取模(取余)
结果的正负与被模数相关
- 12 / 5 = -2
12 / -5 = 2
++ --
不会改变本身变量的数据类型
当达到数据类型的最大值时,结果为数据类型的最小值
当达到数据类型的最小值时,结果为数据类型的最大值
赋值运算符
+= -= *= /= %=
不会改变本身变量的数据类型
当达到数据类型的最大值时,结果为数据类型的最小值
当达到数据类型的最小值时,结果为数据类型的最大值
逻辑运算符
只能用在boolean上
& 逻辑与 && 短路与
&运算,当第一个表达式为false时,第二个表达式依然会执行
&& 当第一个表达式为false时,第二个表达式不会执行
| 逻辑或 || 短路或
|运算 当第一个表达式为true时,第二个表达式依然会执行
|| 当第一个表达式为true时,第二个表达式不会执行
! 逻辑非
^ 逻辑异或
当两个表达式一个为true,一个为false时返回true
位运算符
整数的运算
以二进制做运算
<< 左移
整个位向左移动,右侧补0
向左移n位,相当于对初始值*2的n次幂 21 << n 21 * 2^n
当移动导致最高位由0变为1或由1变为0时,数据会发生大变化
>> 右移
整个位向右移动,左侧最高位为0则补0,为1则补1
向右移n位,相当于对初始值/2的n次幂 21 >> n 21 / 2^n,不能超过一定范围
>>> 无符号右移
整个位向右移动,左侧最高位补0
& 与运算
两个二进制数据,相同位都为1则为1,否则为0
| 或运算
两个二进制数据,同位有1就为1,否则为0
^ 异或运算
两个二进制数据,同位不一样时为1,一样时为0
交换两个数字的值
int num1 = 12, num2 = 5;
num1 = num1 ^ num2
得到一个新值
num2 = num1 ^ num2
获取得是原num1的值
num1 = num1 ^ num2
获取得是原num2的值
~ 取反运算
1变0,0变1
三目运算符?:
若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型
==
对于引用数据类型,比较的是地址值