Java基础知识总结之运算符
一、算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +1 | 1 |
- | 负号 | -1 | 1 |
+ | 加 | 2+3 | 5 |
- | 减 | 5-2 | 3 |
* | 乘 | 2*5 | 10 |
/ | 除 | 10/2 | 5 |
% | 取模 | 5%3 | 2 |
++ | 自增(前):先运算后取值 | a=2;b=++a | a=3;b=3 |
++ | 自增(后):先取值后运算 | a=2;b=a++ | a=3;b=2 |
– | 自减(前):先运算后取值 | a=2;b=–a | a=1;b=1 |
– | 自减(后):先取值后运算 | a=2;b=a– | a=1;b=2 |
+ | 字符串连接 | “Ja”+“va” | “Java” |
注意:
- /运算两个操作数都是整数时,为整数除法,否则,为浮点除法,例如15/2等于7,15.0/2等于7.5。整数/0将会产生一个异常,浮点数/0会得到无穷大或NAN。
- %运算结果的符号和被模数相同。
- 当String字符串与其他数据类型中间使用+号只能是做字符串连接运算,并且结果为String类型。
二、赋值运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | a=3,b=2 | a=3,b=2 |
+= | 加等于 | a=3,b=2,a+=b | a=5,b=2 |
-+ | 减等于 | a=3,b=2,a-=b | a=1,b=2 |
*= | 复合乘法的赋值运算 | a=3,b=2,a*=b | a=6,b=2 |
/= | 除等于 | a=3,b=2,a/=b | a=1,b=2 |
%= | 模等于 | a=3,b=2,a%=b | a=1,b=2 |
注意:如果复合赋值运算符得到一个值,其类型与左侧操作数类型不同,就会发生强制类型转换。例如
x += 3.5;
,如果x为int类型,则会将x设置为(int)(x + 3.5)
。
三、关系运算符(比较运算符)
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 等于 | 7=5 | false |
!= | 不等于 | 7!=5 | true |
< | 小于 | 7<5 | false |
> | 大于 | 7>5 | true |
<= | 小于等于 | 7<=5 | false |
>= | 大于等于 | 7>=5 | true |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
注意:
- 比较运算符的结果都是布尔类型,要么为true,要么为false。
- >、< 、>= 、<=只支持左右两边操作数是数值类型。
- ==、 !=两边的操作数既可以是数值类型,也可以是引用类型。
- 不要将关系运算符==写成=。
四、逻辑运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
& | 逻辑与 | false&true | false |
| | 逻辑或 | false|true | true |
^ | 逻辑异或 | true^false | true |
! | 逻辑非 | !true | false |
&& | 短路与 | false&&true | false |
|| | 短路或 | false||true | true |
运算法则如下:
a | b | a&b | a|b | a^b | !a | a&&b | a||b |
---|---|---|---|---|---|---|---|
true | true | true | true | false | false | true | true |
true | false | false | true | true | false | false | true |
false | true | false | true | true | true | false | true |
false | false | false | false | false | true | false | false |
注意:
- &与&&以及|与||的区别:
- &:左边无论真假,右边都进行运算。
- &&:如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
- |:左边无论真假,右边都进行运算。
- ||:如果左边为假,右边参与运算,如果左边为真,那么右边不参与运算。
- 异或(^)与或(|)的不同之处是,当左右都为true时,结果为false。
五、位运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
<< | 左移 | 3<<2 | 12(3*22) |
>> | 右移 | 6>>2 | 1(6/22) |
>>> | 无符号右移 | 3>>>1 | 1(3/2) |
& | 与 | 6&3 | 2 |
| | 或 | 6|3 | 7 |
^ | 异或 | 6^3 | 5 |
~ | 反码 | ~6 | -7 |
<<(左移):空位补0,被移除的高位丢弃,空缺位补0。3<<2运算过程如下:
00000000 | 00000000 | 00000000 | 00000011 | 3 |
---|---|---|---|---|
00000000 | 00000000 | 00000000 | 000011 | 左移2位 |
00000000 | 00000000 | 00000000 | 00001100 | 低位补0,结果为12 |
<<的结果是乘以2的移动位数次幂。
>>:被移位的二进制最高位是0,右移后空缺位补0,最高位是1,空缺位补1。6>>2运算过程如下:
00000000 | 00000000 | 00000000 | 00000110 | 6 |
---|---|---|---|---|
000000 | 00000000 | 00000000 | 00000001 | 右移2位 |
00000000 | 00000000 | 00000000 | 00000001 | 高位补0,结果为1 |
>>的结果是除以2的移动位数次幂。
>>>:被移位的二进制最高位无论是0还是1,空缺位都补0。-6>>>2运算过程如下:
11111111 | 11111111 | 11111111 | 11111010 | -6 |
---|---|---|---|---|
111111 | 11111111 | 11111111 | 11111110 | 右移2位 |
00111111 | 11111111 | 11111111 | 11111110 | 高位补0,结果为1073741822 |
&:二进制位进行&运算,参与运算的两位都为1,结果才是1,否则为0。6&3运算过程如下:
00000000 | 00000000 | 00000000 | 00000110 | 6 |
---|---|---|---|---|
00000000 | 00000000 | 00000000 | 00000011 | 3 |
00000000 | 00000000 | 00000000 | 00000010 | 2 |
|:二进制位进行|运算,参与运算的两位都为0,结果才是0,否则为1。6|3运算过程如下:
00000000 | 00000000 | 00000000 | 00000110 | 6 |
---|---|---|---|---|
00000000 | 00000000 | 00000000 | 00000011 | 3 |
00000000 | 00000000 | 00000000 | 00000111 | 7 |
^:二进制位进行^运算,参与运算的两位不同,结果才是1,否则为0。6^3运算过程如下:
00000000 | 00000000 | 00000000 | 00000110 | 6 |
---|---|---|---|---|
00000000 | 00000000 | 00000000 | 00000011 | 3 |
00000000 | 00000000 | 00000000 | 00000101 | 5 |
~:二进制只有1和0,参与运算的位如果是1,取反为0,如果为0,取反为1。~6运算过程如下:
00000000 | 00000000 | 00000000 | 00000110 | 6 |
---|---|---|---|---|
11111111 | 11111111 | 11111111 | 11111001 | -7 |
当参与取反的数值是正数时,结果为把对应的值加上负号再-1;当参与取反的数值是负数时,结果为把对应的值加上负号再-1。
六、三元运算符(三目运算符)
格式:condition?:expression1:expression2;
condition为true,运算结果为expression1;条件表达式为false,运算结果为expression2。
注意:
- 表达式1与表达式2的类型必须一致。
- 2、使用三元运算符的地方一定可以使用if…else代替,反之不一定成立。
七、运算符优先级
表中优先级序号1的优先级最高,优先级序号14的优先级最低。使用优先级为1的小括号可以改变其他运算符的优先级。