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 | 制表符号 |
| \' | 输入单引号 " |
| \" | 输入双引号 ' |
| \ | 输入反斜杠 \ |