运算符分类
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
运算符的分类:
按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算
符、条件运算符、Lambda 运算符
分类 | 运算符 |
---|---|
算术运算符(7 个) | +、-、*、/、%、++、– |
赋值运算符(12 个) | =、+=、-=、*=、/=、%=、>>=、<<=、>>>= |
&=、 | =、^=等 |
比较(或关系)运算符 | >、>=、<、<=、==、!= (6个) |
逻辑运算符(6 个) | &、|、||、!、&&、 ^ |
位运算符(7 个) | &、|、^、~、<<、>>、>>> |
条件运算符(1 个) | (条件表达式)?结果 1:结果 2 |
Lambda 运算符 | “转到”或者 “成为” |
按照操作数个数分为:
一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)
分类 | 运算符 |
---|---|
一元运算符(单目运算符) | 正号(+)、负号(-)、++、–、!、~ |
二元运算符(双目运算符) | 除了一元和三元运算符剩下的都是二元运算符 |
三元运算符 (三目运算符) | (条件表达式)?结果 1:结果 2 |
算术运算符
++变量
与变量++
案例1、
public class hello {
public static void main(String[] args) {
int a = 10;
int b = a++;
System.out.println(a);
System.out.println(b);
System.out.println("==========");
int c = 20;
int d = 20;
System.out.println(++c);// 21
System.out.println(c); // 21
System.out.println(d++); // 20
System.out.println(d); // 21
}
}
案例2、
public class hello {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a++;
System.out.print("c=" + c); // c=10
System.out.println("a=" + a);// a=11
c = ++a; // a=12
System.out.print("c=" + c);// c=12
System.out.println("a=" + a);// a=12
c = b--;// c=20
System.out.print("c=" + c);// c=20
System.out.println("b=" + b);// b=19
c = --b; // c=18
System.out.print("c=" + c);// c=18
System.out.println("b=" + b);// b=18
}
}
赋值运算符
符号: =
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
扩展赋值运算符: +=、 -=、*=、 /=、%=
算符 | 符号解释 |
---|---|
+= | 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量 |
-= | 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量 |
*= | 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量 |
/= | 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量 |
%= | 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量 |
int i = 1;
i *= 0.1;
System.out.println(i);//0
i++;
System.out.println(i);//1
int m = 2;
int n = 3;
n *= m++; //n = n * m++;
System.out.println("m=" + m);//3
System.out.println("n=" + n);//6
int n = 10;
n += (n++) + (++n); //n = n + (n++) + (++n)
System.out.println(n);//32
比较(关系)运算符
比较运算符的结果都是 boolean 型,也就是要么是 true
,要么是 false
逻辑运算符
逻辑运算符,操作的都是 boolean 类型的变量或常量,而且运算得结果也是 boolean
类型的值。
- & 和 &&:表示"且"关系,当符号左右两边布尔值都是
true
时,结果才能为true
。否则,为false
。
int a = 1;
int b = 2;
int c = 3;
System.out.println((a > b) & (a > c)); //false
System.out.println((a > b) & (a < c)); //false
System.out.println((a < b) & (a > c)); //false
- | 和 || :表示"或"关系,当符号两边布尔值有一边为
true
时,结果为true
。当两边都为false
时,结果为false
System.out.println((a > b) | (a > c)); //false
System.out.println((a > b) | (a < c)); //true
System.out.println((a < b) | (a > c)); //true
System.out.println((a < b) | (a < c)); //true
- ! :表示"非"关系,当变量布尔值为
true
时,结果为false
。当变量布尔值为false
时,结果为true
。
System.out.println(!false);
- ^ :当符号左右两边布尔值不同时,结果为
true
。当两边布尔值相同时,结果为false
。
System.out.println((a > b) ^ (a > c)); //false
System.out.println((a > b) ^ (a < c)); //true
System.out.println((a < b) ^ (a > c)); //true
System.out.println((a < b) ^ (a < c)); //false
“&” 和 “&&” 区别 :
- 相同点:如果符号左边是
true
,则二者都执行符号右边的操作 - 不同点:& : 如果符号左边是
false
,则继续执行符号右边
的操作 - && :如果符号左边是
false
,则不再继续执行符号右边
的操作 - 建议:开发中,推荐使用
&&
int a = 1;
int b = 1;
if (a++ == 2 & ++b == 2) {
a = 7;
}
System.out.println("a=" + a + ",b=" + b); //2 2
int a = 1, b = 1;
if (a++ == 2 && ++b == 2) {
a = 7;
}
System.out.println("a=" + a + ",b=" + b); //2 1
“|”和“||” 区别 :
- 相同点:如果符号左边是
false
,则二者都执行符号右边
的操作 - 不同点:| : 如果符号左边是
true
,则继续执行符号右边
的操作 - || :如果符号左边是
true
,则不再继续执行符号右边
的操作 - 建议:开发中,推荐使用
||
int x = 1,y = 1;
if(x++==1 | ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y); // 7 2
int x = 1,y = 1;
if(x++==1 || ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y); //7 1
条件运算符
条件运算符格式:
(条件表达式)? 表达式 1
: 表达式 2
int n1 = 1;
int n2 = 2;
int n3 = 3;
int tempMax = (n1 > n2)? n1:n2;
int finalMax = (tempMax > n3)? tempMax : n3;
System.out.println("三个数中最大值为:" + finalMax);
运算符优先级
优先级 | 运算符说明 | Java 运算符 |
---|---|---|
1 | 括号 | ()、[]、{} |
2 | 正负号 | +、- |
3 | 单元运算符 | ++、–、~、! |
4 | 乘法、除法、求余 | *、/、% |
5 | 加法、减法 | +、- |
6 | 移位运算符 | <<、>>、>>> |
7 | 关系运算符 | <、<=、>=、>、instanceof |
8 | 等价运算符 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 条件与 | && |
13 | 条件或 | |
14 | 三元运算符 | ? : |
15 | 赋值运算符 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算符 | &=、|=、<<=、>>=、>>>= |
- 不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序
- 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成