运算符和优先级
1、算数运算符
算术运算符即算术运算符号。是完成基本的算术运算(arithmetic operators) 符号,就是用来处理四则运算的符号。
运算符 | 描述 | 示例 | 结果 |
+ | 加法 | 1+1 | 2 |
- | 减法 | 2-1 | 1 |
* | 乘法 | 2*3 | 6 |
/ | 除法(取商) | 5/2 | 2 |
% | 取余(取模、取余) | 5/2 | 1 |
++ | 自增 | ||
-- | 自减 |
普通的算数运算符
public class Test01 {
public static void main(String[] args) {
int a = 5;
int b = 2;
//加法
int result1 = a + b;
System.out.println(result1); //控制台输出7
//减法
int result2 = a - b;
System.out.println(result2); //控制台输出3
//乘法
int result3 = a * b;
System.out.println(result3); //控制台输出10
//除法
int result4 = a / b;
System.out.println(result4); //控制台输出2
//取模
int result5 = a % b;
System.out.println(result5); //控制台输出1
}
}
自增自减
a++的含义是a先参与运算,运算结束后把自己的值加1,++a的含义是a先把自身的值加1,然后再参与运算,a--和--a同理。
public class Test02 {
public static void main(String[] args) {
int a = 5;
int b = 2;
a = b ++ ;
System.out.println(a); //控制台输出2
System.out.println(b); //控制台输出3
//先将b的值赋值给a,再自增
int c = 5;
int d = 2;
c = ++ d;
System.out.println(c); //控制台输出3
System.out.println(d); //控制台输出3
//先将c的值自增1,再将c的值赋值给b
}
}
2、赋值运算符
赋值运算符的意思是将运算符右侧的对象或者数值传递给左侧的对象或者变量,a += 2 的运算就是a = a + 2 ,其他同理
运算符 | 描述 | 示例 | 结果 |
= | 赋值 | a = 5 | a = 5 |
+= | 加等于 | a = 5 ,a += 2 | a = 7 |
-= | 减等于 | a = 5 ,a -= 2 | a = 3 |
*= | 乘等于 | a = 5 ,a *= 2 | a = 10 |
/= | 除等于 | a = 5 ,a /= 2 | a = 2 |
%= | 模等于 | a = 5 ,a %= 2 | a = 1 |
在类型转换时有个题目,涉及到数据类型转换
public class Test03 {
public static void main(String[] args) {
short a = 5 ;
//a = a + 1;
a += 1;
System.out.println(a); //控制台输出6
}
}
a = a + 1会报错,因为在运算时把short类型转换成了int类型,运算结束后将int类型转换成范围更小的short类型,会报类型转换的错误,但是a += 1本质上也是 a = a + 1, 但是当JVM识别+=且原值为short类型时,会先忽略原值的具体数据类型,先用int计算后,如果计算结果是int就直接转为原来的数据类型,如果不是int就强转为int然后再转回原数据类型,可以理解成 += 已经添加了强制类型转换,所以不会报错。
3、关系运算符
用于判断两个变量或常量的大小,关系运算符是二元运算符,运算结果是boolean型,当运算符对应的关系成立时,运算结果为true,否则为false
运算符 | 描述 | 示例 | 结果 |
== | 等于 | a = 5 ,a == 2 | false |
!= | 不等于 | a = 5 , a != 2 | true |
< | 小于 | a = 5 ,a < 2 | false |
> | 大于 | a = 5 ,a > 2 | true |
<= | 小于等于 | a = 5 ,a <= 2 | false |
>= | 大于等于 | a = 5 ,a >= 2 | true |
4、逻辑运算符
逻辑运算符是对布尔型的常量、变量或表达式进行运算,逻辑运算的返回值也是布尔型。
运算符 | 描述 | 示例 | 结果 |
& | 与 | false & true | false |
| | 或 | false | true | true |
! | 非 | !true | false |
^ | 异或 | true ^ false | true |
&& | 短路与 | false && true | false |
|| | 短路或 | false || true | true |
public class Test04 {
public static void main(String[] args) {
boolean a = true ;
boolean b = false ;
//与运算,两边都为true,结果才为true,否则为false
System.out.println(a & b); //控制台输出false
//或运算,两边只要一个为true,结果就为true,两边都是false,结果才是false
System.out.println(a | b); //控制台输出true
//非运算,取反,true的非运算为false,false的非运算为true
System.out.println(!b); //控制台输出true
//异或运算,两边相同为true,不同为false
System.out.println(a ^ b); //控制台输出false
//短路与,两边都为true,结果才为true,否则为false
System.out.println(a && b); //控制台输出false
//短路或,或运算,两边只要一个为true,结果就为true,两边都是false,结果才是false
System.out.println(a || b); //控制台输出true
}
}
& 和 && 的区别
& :在算数运算时分别计算表达式两边的结果,再做与运算;在做位运算时&表示按位与;
&& : 短路与,先计算表达式左边的结果,如果结果是false,便不再计算右边的表达式的结果,直接返回false;
如果左边的表达式结果是true,在计算右边的表达式结果,如果右边的表达式结果为true,则返回true,如果右边表达式结果为false,则返回false。
&& 的效率 比 & 高,| 和 || 同理。
5、位运算符
位运算符用来对二进制位进行操作,Java中提供了如下表所示的位运算符:位运算符中,除 ~ 以外,其余均为二元运算符,操作数只能为整型和字符型数据。
位运算符有七个,分为两类:
- 逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)
- 移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)
非位(~):
按位取反操作会翻转其每一位。运算规则:0变为1,1变为0。
位与(&):
一个&时,参加运算的两个数据,按二进制位进行“与”运算。运算规则:同1为一,其余为0。
位或(|):
一个 | 时,参加运算的两个对象,按二进制位进行“或”运算。运算规则:同0为0,有1为1。另外,负数按补码形式参加按位或运算。
位异或(^):
参与运算的两个数据,按二进制位进行“异或”运算。运算规则:相同为0,不同为1。
左移(<<):
符号左边是要进行左移运算的数,右边表示要移动的位数。运算规则:高位丢弃,低位补0。
右移(>>):
符号左边是要进行左移运算的数,右边表示要移动的位数。运算规则:正数左补0,负数左补1.
无符号右移(>>>):
即右移之后,无论该数为正还是为负,右移之后左补0。
添加图片注释,不超过 140 字(可选)
6、三目运算符
表达式为:表达式1?表达式2:表达式3
先求解表达式1,
若其值为真(非0)则将表达式2的值作为整个表达式的取值,
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
public class Test05 {
public static void main(String[] args) {
int weight = 100;
String s = weight > 90 ? "超重" : "没有超重";
System.out.println(s);
}
//控制台输出超重
}
7、运算符的优先级
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。
优先级 | 运算符 | 结合性 |
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、-- | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
使用优先级为 1 的小括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来。
请先 后发表评论~