运算符:
算术运算符:
+
-
* : 乘
/ : 除
% : 取模
++ : 自增1
- - : 自减1
前++和前–优先级仅次于’()‘, 后–和后++优先级仅高于’=’
int a = 0;
a = ++(a++); // 会报错, 因为括号内是一个数值, 自增自减运算符用于变量
关系(比较)运算符:
A = 1;
B = 2;
运算符 | 描述 | 结果 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真 | (A == B) 为假 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真 | (A != B) 为真 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真 | (A > B) 为假 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真 | (A < B) 为真 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真 | (A >= B) 为假 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真 | (A <= B) 为真 |
返回boolean类型
逻辑运算符:
同数学的逻辑运算, 这里不做解释
|| : 逻辑或运算符
&& : 逻辑与运算符
& : 与运算符
| : 或运算符
// 以上两个也可以用在逻辑运算中, 效果等同上面两个
! : 逻辑非运算符
& 与 &&的区别:
&& 和 ||, 叫短路与和短路或
如果前面的条件已经可以得到结果, 则不会继续向后判断, 效率较高
而单与(或), 即便已经得到结果也会继续向后判断, 直到所有判断束才返回结果
编程一般用&&, ||
逻辑非 ( ! ) > 算术 > 逻辑与 ( && )、逻辑或 ( || ) > 赋值 ( = )
位运算符:
A = 60
B = 13
运算符 | 描述 | 运算规则 |
---|---|---|
& | 按位与操作, 按二进制位进行"与"运算 | 0&0=0; 0&1=0; 1&0=0; 1&1=1; (A & B) 将得到 12, 即为 0000 1100 |
| | 按位或运算符, 按二进制位进行"或"运算 | 0 | 0=0; 0 | 1=1; 1 | 0=1; 1 | 1=1; (A | B) 将得到 61, 即为 0011 1101 |
^ | 异或运算符, 按二进制位进行"异或"运算 | 0^0=0; 0^1=1; 1^0=1; 1^1=0; (A ^ B) 将得到 49, 即为 0011 0001 |
~ | 取反运算符, 按二进制位进行"取反"运算 | ~1=-2; ~0=-1; (~A ) 将得到 -61,即为 1100 0011, 一个有符号二进制数的补码形式 |
<< | 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0 | A << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符, 将一个数的各二进制位全部右移若干位, 正数左补0, 负数左补1, 右边丢弃 | A >> 2 将得到 15, 即为 0000 1111 |
>>> | 二进制有符号位移运算符, 同上面的>>, 只是算上符号位 | 此运算符需注意, 只对32位和64位数据有意义 |
赋值运算符和二元运算符:
= : 赋值符
+= : 先加后赋值 , byte a = 0; a += 2相当于byte a =0; a = (byte)(a + 2), 下同
-= : 先减后赋值
/= : 先乘后赋值
%= : 先
*=
二元运算符隐含一个强制类型转换
byte a = 10;
byte b = 20;
a += 10; // a = 20, 自动进行强制类型转换
b = b + 10; // 会报错, 因为没有进行类型转换, int不可赋值给byte
三目运算符:
表达式 ? a : b
相当于一个if esle 语句
示例:
int a = 1;
int b = 2;
int c = 0;
c = a > b ? a : b; // c的值为2
// 相当于:
if (a > b) {
c = a;
}
else {
c = b;
}
运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、– | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | <<、>>、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof 从左向右 | |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | =、+=、-=、*=、/=、&=、 | =、^=、~=、«=、»=、>>>= |
需要特别注意的点:
- & 和 | 可以用于逻辑运算
& 与 &&的区别:
&& 和 ||, 叫短路与和短路或
如果前面的条件已经可以得到结果, 则不会继续向后判断, 效率较高
而单与(或), 即便已经得到结果也会继续向后判断, 直到所有判断束才返回结果
编程一般用&&, ||
- 二元运算符自带一个强制类型转换
- 前++和前–优先级仅次于’()‘, 后–和后++优先级仅高于’=’
- 自增自减用于变量, 不能用于数值和常量
int a = 0;
a = ++(a++); // 会报错, 因为括号内是一个数值, 自增自减运算符用于变量