7 运算符
7.1 赋值运算符
运算符 | 名称 | 用法 | 描述 |
---|---|---|---|
= | 赋值 | int a = 3 ; | 将 = 右边的值 赋值给 = 左边的变量 |
7.2 算术运算符
运算符 | 名称 | 用法 | 结果 |
---|---|---|---|
+ | 加 | 5 + 2 | 7 |
- | 减 | 5-2 | 3 |
* | 乘 | 5*2 | 10 |
/ | 除 | 5/2 | 2 |
% | 取余 | 5%2 | 1 |
7.3 一元运算符
运算符 | 用法 | 描述 |
---|---|---|
++ | (先加)++x 或x++(先用) | 自增1 |
-- | (先减)--x或x--(先用) | 自减1 |
a++表达式的值指的是自增之前的值
++a表达式的值指的是自增之后的值
7.4 关系(比较)运算符
运算符 | 名称 | 用法 | 结果(Boolean值) |
---|---|---|---|
> | 大于 | 2>1 | true |
< | 小于 | 2<1 | false |
>= | 大于等于 | 2>=1 | true |
<= | 小于等于 | 2<=1 | flase |
== | 等于 | 2==1 | false |
!= | 不等于 | 2!=1 | true |
(坑:double d1=0.1;
double d2=1-0.9; //d1!=d2
double d1=0.9;
double d2=1-0.1; //d1==d2
)
7.5 逻辑运算符(只能比较 boolean值,结果也为 boolean值)
运算符 | 名称 | 用法 | 描述 ( 结果(Boolean值) ) | ||||
---|---|---|---|---|---|---|---|
&& | (短路)与 | 条件1 && 条件2 | 只要两个条件有一个为假,结果为假 | ||||
& | 与 | 条件1 & 条件2 | 只要两个条件有一个为假,结果为假 | ||||
\ | \ | (短路)或 | 条件1\ | \ | 条件2 | 只要两个条件有一个为真,结果为真 | |
\ | 或 | 条件1\ | 条件2 | 只要两个条件有一个为真,结果为真 | |||
! | 非 | !条件 | 条件为真时,结果为假,反之亦然 | ||||
^ | 异或 | 条件1 ^ 条件2 | 两个条件结果相同时为假,不同为真 |
解释:短路
当 条件1 && 条件2 如果条件1为false,结果明显为false,所以条件2不会再判断。
当 条件1 & 条件2 如果条件1为false,结果明显为false,但条件2语句一样会被运算。
7.6 位运算符(2进制运算符)
运算符 | 名称 | 用法 | 描述 | ||
---|---|---|---|---|---|
& | 按位与 | 00001001&00001110 -> 00001000 | 按位比较,只要有0,则取0 | ||
\ | 按位或 | 00001001\ | 00001110 -> 00001111 | 按位比较,只要有1,则取1 | |
^ | 按位异或 | 00001001^00001110 -> 00000111 | 按位比较,相同取0,不同取1 | ||
~ | 按位非 | ~00000010 -> 11111101 | 对位取反 | ||
<< | 左移 | 01000011 << 2 -> 00000110 | 每一位向左移动2位,右边补0,超出位数范围则舍去 | ||
>> | 带符号右移 | 11111110 >> 2 -> 11111111 | 每一位向右移动2位,左边补符号位,超出位数范围则舍去 | ||
>>> | 无符号右移 | 11111110 >>> 2 -> 00111111 | 每一位向右移动2位,左边补0,超出位数范围则舍去 |
经典案例1:用最快的速度计算2的3次方; 提示:使用<<
经典案例2:int a =1;int b =2;不借助第三个变量,交换两个数的值; 提示: 使用^
笔记:
位操作符:
~ 按位取反:每一个二进制位包括符号位取反
& 按位与:每一位进行与,有一个0该位结果为0
(应用://判断一个数的奇偶性:用该数与1进行&,
就可以得到最后位为0或者1,为1是奇数,为0就是偶数)
| 按位或:每一位进行或,有一个1该位结果为1
^ 按位异或:每一位进行异或,相同为0,不同为1
a^0:还是a
a^a:结果0
(应用://交换两个变量的值:int a=3;int b=4;
(1)效率最高
a=a^b; //a=3^4
b=a^b; //b=3^4^4=3
a=a^b; //a=3^4^3=4
(2) 借助中间变量
int temp=a;
a=b;
b=temp;
(3) 不借助中间变量
a=a+b; //
b=a-b; //b=7-4=3
a=a-b; //a=7-3=4
)
移位操作:Java会自动对移动的位数进行取余。
int n=1<<32;----> n=1; //int 类型进行32取余
long //long类型进行64取余
byte n=1<<8;----> n=2^8 //因为8默认为int,则n也会自动转为int,所以还是进行32取余
<< 左移:每一位左移,高位溢出,低位补零(左移n位,该数乘以2^n)
//计算2^3的最快方式:1<<3
>> 带符号右移:每一位右移,低位溢出,高位补符号位(右移n位,该数除以2^n)
//应用:125获取他的倒数第三个二进制位:【(125>>2)&1】
>>> 无符号右移:每一位右移,低位溢出,高位补0
7.7 三目(三元)运算符
运算符 | 名称 |
---|---|
? | 吗 |
: | 否则 |
用法:
zhangSanScore > 98 ? "奖励Iphone 8 " : "没有任何奖励" ;
语法解释:张三的成绩大于98吗?如果大于"奖励Iphone 8 ",否则"没有任何奖励";
7.8 字符串连接运算符
运算符 | 名称 | 用法 | 结果 |
---|---|---|---|
+ | 字符串追加 | String s="张三"+"是个男孩"; | s -> 张三是个男孩 |
注:只要+的两端有一端是字符串,则这个时候+就变成了字符串连接符
7.9 运算符优先级
优先级 | 运算符 | 结合性 | ||
---|---|---|---|---|
1 | ()[]. | 从左到右 | ||
2 | !+(正) -(负)~++-- | 从右向左 | ||
3 | */% | 从左向右 | ||
4 | +(加)-(减) | 从左向右 | ||
5 | <<>>>>> | 从左向右 | ||
6 | <<=>>=instanceof | 从左向右 | ||
7 | == != | 从左向右 | ||
8 | &(按位与) | 从左向右 | ||
9 | ^ | 从左向右 | ||
10 | \ | 从左向右 | ||
11 | && | 从左向右 | ||
12 | \ | \ | 从左向右 | |
13 | ?: | 从右向左 | ||
14 | =+=-=*=/=%=&=\ | =^= ~= <<=>>=>>>= | 从右向左 |
注:只需要知道 () 的优先级是最高的,其他的不需要记,当运算表达式比较复杂,不能确定运算顺序的时候,可以添加括号 () 控制执行顺序。
7.10 转义字符
符号 | 效果 |
---|---|
\n | 换行 |
\t | 制表符号 |
\' | 输入单引号 " |
\" | 输入双引号 ' |
\ | 输入反斜杠 \ |