运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
运算符的分类:
按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算
符、条件运算符、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);// 21System.out.println(c); // 21System.out.println(d++); // 20System.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=10System.out.println("a=" + a);// a=11c = ++a; // a=12System.out.print("c=" + c);// c=12System.out.println("a=" + a);// a=12c = b--;// c=20System.out.print("c=" + c);// c=20System.out.println("b=" + b);// b=19c = --b; // c=18System.out.print("c=" + c);// c=18System.out.println("b=" + b);// b=18}
}
符号: =
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
扩展赋值运算符: +=、 -=、*=、 /=、%=
算符 | 符号解释 |
---|---|
+= | 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量 |
-= | 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量 |
*= | 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量 |
/= | 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量 |
%= | 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量 |
int i = 1;i *= 0.1;System.out.println(i);//0i++;System.out.println(i);//1int m = 2;int n = 3;n *= m++; //n = n * m++;System.out.println("m=" + m);//3System.out.println("n=" + n);//6int 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)); //falseSystem.out.println((a > b) & (a < c)); //falseSystem.out.println((a < b) & (a > c)); //false
true
时,结果为true
。当两边都为 false
时,结果为 false
System.out.println((a > b) | (a > c)); //falseSystem.out.println((a > b) | (a < c)); //trueSystem.out.println((a < b) | (a > c)); //trueSystem.out.println((a < b) | (a < c)); //true
true
时,结果为 false
。当变量布尔值为 false
时,结果为 true
。System.out.println(!false);
true
。当两边布尔值相同时,结果为 false
。System.out.println((a > b) ^ (a > c)); //falseSystem.out.println((a > b) ^ (a < c)); //trueSystem.out.println((a < b) ^ (a > c)); //trueSystem.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 2int 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 2int 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 | 位赋值运算符 | &=、|=、<<=、>>=、>>>= |