运算符分类
编号 | 类型 |
---|---|
1 | 算术运算符 (+,-,*,/,%,++,–) |
2 | 关系运算符 (>,<,>=,<=,==,!=) |
3 | 逻辑运算符 (!,&&,||) |
4 | 位运算符 (>>,<<,>>>,&,|,^,~ ) |
5 | 赋值运算符 (=,及 其 扩 展 赋 值 运 算 符 如 +=) |
6 | 条件运算符( ?:) |
7 | 其它运算符 |
算术运算符
符号 | 名称 | 优先级 | 类型 |
---|---|---|---|
+ | 正号 | 从右到左 | 单目 |
- | 负号 | 从右到左 | 单目 |
+ | 加 | 从左到右 | 双目 |
- | 减 | 从左到右 | 双目 |
* | 乘 | 从左到右 | 双目 |
/ | 除 | 从左到右 | 双目 |
% | 取余 | 从左到右 | 双目 |
++ | 自增 | 从右到左 | 单目 |
- - | 自减 | 从右到左 | 单目 |
问题1:
//当j=0时,j+=(++j)+(j++) 这条式子的值是多少?
int j = 0;
System.out.println(j+=(++j)+(j++));
运行结果是:2
我们将式子还原一下:
如果j=0
j+=(++j)+(j++)
原式子:
0+=(1)+(1)
最终结果是:2
如果j=1
j+=(++j)+(j++)
原式子:
1+=(2)+(2)
最终结果是:5
如果j=2
j+=(++j)+(j++)
原式子:
2+=(3)+(3)
最终结果是:8
得出来的结论是:
++j :先运算后执行
j++ :先执行后运算
因为不管是(++j) 还是 (j++) 都会影响它本身。
问题2:
如果定义一个byte类型的变量等于127,然后执行+1操作会是什么结果?
public class Demo{
public static void main(String args[]){
//循环了,跳出,原因是byte类型范围是-128-127
//当循环到127时,会向左位移1位变成-128
//所以会一直循环
for(byte i =0 ;i < 200;i++){
System.out.println(i++);
}
}
}
得出来的结果是: 在-128 到 127 范围内无限循环。
原因是
byte a = 127;
//加运算符是会自动转换的,所以不会出错
System.out.println(a + 1);
Linux 命令:
> 在LINUX下是标准输出
< 在linux下是标准输入
逻辑运算符
符号 | 名称 | 优先级 | 类型 |
---|---|---|---|
< | 小于 | 从左到右 | 双目 |
<= | 小于等于 | 从左到右 | 双目 |
> | 大于 | 从左到右 | 双目 |
>= | 大于等于 | 从左到右 | 双目 |
== | 等于 | 从左到右 | 双目 |
!= | 不等于 | 从左到右 | 双目 |
& | 按位与 | 从左到右 | 双目 |
| | 按位或 | 从左到右 | 双目 |
^ | 按位异或 | 从左到右 | 双目 |
&& | 短路与 | 从左到右 | 双目 |
|| | 短路或 | 从左到右 | 双目 |
- 理论归理论,还要多练习,这里拿 && 跟 || 来测试
int i =0;
if((2-1>0) || (1==++i)){
System.out.println(i);
}
结果为0
因为||运算符中,前面有个为true时(2-1>0),后面的都不会执行
int i =0;
if((2-1>10) && (1==++i)){
System.out.println(i);
}
System.out.println("第二行 i=" + i);
结果是不执行。
因为(2-1>10)不成了,所以下面的都不执行
位运算符
符号 | 名称 | 优先级 | 类型 |
---|---|---|---|
<< | 左移位运算符 | 从左到右 | 双目 |
>> | 带符号右位移运算符 | 从左到右 | 双目 |
>>> | 无符号右移 | 从左到右 | 双目 |
< | 小于 | 从左到右 | 双目 |
<= | 小于或等于 | 从左到右 | 双目 |
> | 大于 | 从左到右 | 双目 |
>= | 大于或等于 | 从左到右 | 双目 |
赋值运算符
符号 | 名称 | 优先级 | 类型 |
---|---|---|---|
= | 赋值运算符 | 从右到左 | 双目 |
+= | 混合赋值运算符 | ||
-= | |||
*= | |||
/= | |||
%= | |||
&= | |||
|= | |||
^= | |||
<<= | |||
>>= | |||
>>>= |
条件运算符
符号 | 名称 | 优先级 | 类型 |
---|---|---|---|
?: | 条件运算符 | 从右到左 | 三目 |
其他运算符
符号 | 名称 | 优先级 | 类型 |
---|---|---|---|
. | 点 | 从左到右 | 双目 |
( ) | 圆括号 | 从左到右 | |
[ ] | 方括号 | 从左到右 | |
instanceof | 确定某对象是否属于指定的类 | 从左到右 | 双目 |