接下来要讲解运算符,运算符有:算术运算符
关系运算符
逻辑运算符
赋值运算符
字符串连接运算符
三元运算符
算术运算符:+ 求和
- 相减
* 乘积
/ 商
% 求余数(取模)
++ 自加1
-- 自减1
注意:一个表达式当中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。没有必要去专门记忆运算符的优先级
int k = 10;
k++
k 11 ++运算符可以出现在变量后面(单目运算符)
int y = 10
++y
y 11 ++运算符可以出现在变量前面(单目运算符)
小结:++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后,只要++运算结束,该变量中的值一定会自加1
++出现在变量后
规则:先做赋值运算,再对变量中保存的值进行自加1
int a = 100;
int b = a++;
a 101
b 100
++出现在变量前
规则:先进行自加1运算,然后再进行赋值操作
int m = 20;
int n = ++m;
m 21
n 21
int e = 100;
e++ 100
e 101
int s = 100;
++s
s
–s
s++
s–
s–
s–
s
答案分别是:101,101,100,100,101,100,99,98
关系运算符:> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于
= 是赋值运算符
==是关系运算符
关系运算符的运算结果一定是布尔类型:true/false
逻辑运算符:& 逻辑与(并且)(两边的算子都是true,结果才是true)
| 逻辑或(或者)(两边的算子只要有一个是true,结果就是true)
! 逻辑非(取反,!false就是true,!true就是false,这是一个单目运算符)
^ 逻辑异或 (两边的算子只要不一样,结果就是true)
& & 短路与
| | 短路或
①逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型
②短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象
③短路或和逻辑或最终的运算结果是相同的,只不过短路或存在短路现象
逻辑与和短路与
int x = 10;
int y = 8;
System.out.println(x < y & ++x < y); 逻辑与
x;11
int x = 10;
int y = 8;
System.out.println(x < y & & ++x < y); 短路与
x; 10
x < y 结果是false,整个表达式结果已经确定是false
所以后面的表达式没有再执行,这种现象被称为短路现象
短路与才会有短路现象,逻辑与是不会存在短路现象的
从某个角度来看,短路与更智能,由于后面的表达式可能不执行,所以执行效率较高,这种方式在实际的开发中使用较多。
短路与比逻辑与使用的多。短路与更常用
但是,在某些特殊的业务逻辑当中,要求运算符两边的算子必须全部执行,此时必须使用逻辑与,不能使用短路与,使用短路与可能导致右边的表达式不执行
第一个表达式执行结果是true,会发生短路或
第一个表达式执行结果是false,会发生短路与
赋值运算符:
包括:基本的赋值运算符:=
扩展的赋值运算符:+=、-=、*=、/=、%=
1、赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量
2、注意以下代码:
byte i = 10;
i+ = 5; 等同于 i = (byte)(i + 5)
int k = 10;
k+ = 5; 等同于 k = (int)(k + 5)
long x = 10L;
int y = 20;
y+ = x; 等同于 y = (int)(y + x)
3、重要结论:
扩展类的赋值运算符不改变运算运算结果类型,假设最初这个变量的类型byte类型,无论怎么进行追加或追减,最终该变量的数据类型还是byte类型