位运算符
位运算符直接基于底层位处理运算,效率最高。
运算符 | 运算 | 说明 |
---|---|---|
<< | 左移 | 末位补0,被移除的最高位丢弃 |
>> | 右移 | 原高位是几补几 |
>>> | 无符号右移 | 高位补0 |
& | 按位与 | 转成二进制进行与运算,全1为1 |
| | 按位或 | 转成二进制进行或运算,有1出1 |
^ | 异或 | 转换成二进制进行异或运算,相同为0,不同为1 |
~ | 取反 | 所有二进制取反 |
注意:没有<<<运算符。
算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b; | -4 |
+ | 正号 | 5+5 | 10 |
- | 减号 | 6-4 | 2 |
* | 乘号 | 3*6 | 18 |
/ | 除号 | 5/3 | 1 |
% | 取余 | 5/3 | 2 |
++ | 自增(前):先自增再运算 自增(后):先运算再自增 | a=2;b=++a; a=2;b=a++; | a=3;b=3 a=3;b=2 |
-- | 自减(前):先自减再运算 自减(后):先运算再自减 | a=2;b=--a; a=2;b=a--; | a=1;b=1 a=1;b=2 |
- 如果对负数取余,符号不计:5%-2=1。但被取余数是负数,则需考虑符号:-5%2=-1。
- 除运算需要考虑参与运算的数据类型:5/2=1,但5.0/2=2.5,5/2.0=2.5。
- “+”还能进行字符串的拼接:System.out.println(“5+5=”+5+5); 结果为5+5=55
赋值运算符
顾名思义,赋值运算符是给变量赋值的运算符。常见的赋值运算符有:=、+=、-=、*=、/=、%=。
- java中支持连续赋值,a=b=c=10;这三个变量的值均为10;
- 当赋值运算符两侧运算的数据类型不一致时,可以使用自动转换类型或强制类型转换来处理。
int n = 10;
n += 20; // n = 30,相当于n = n + 20;
short a = 10;
a += 20; // 编译通过,a = 30;
a = a + 20; // 编译失败,20是整型字面量,默认为int型
比较运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等 | 4 == 3 | false |
!= | 不相等 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 3 | true |
instanceof | 属于(类) | “hi” instanceof String | true |
注意:比较运算符的结果都是boolean类型
逻辑运算符
逻辑运算符有三个:逻辑与、逻辑或、非。
a | b | a && b | a || b | ! |
---|---|---|---|---|
true | true | true | true | |
true | false | false | true | |
false | true | false | true | |
false | false | false | false | |
true | false | |||
false | true |
int x = 1;
int y = 1;
if(x++ == 2 && ++y == 2)
x = 7;
System.out.println("x = " + x + ", y = " + y); // x = 2, y = 1。由于运算符之前的结果已经为false,所以不做++y。
int x = 1;
int y = 1;
if(x++ == 1 || ++y == 1)
x = 7;
System.out.println("x = " + x + ", y = " + y); // x = 7, y = 1。由于运算符之前的结果已经为true,所以不计算++y。
三元运算符
格式:(条件表达式) ? 条件为真,表达式1 : 条件为假,表达式2;
int a = (3 > 5) ? 3 : 5; // a = 5