运算符
优先级
最高
- 括号 ( ) [ ]
- 后缀自增/自减 i++/i--
单目运算符
-
前缀自增/自减、正负号、按位取反、逻辑非 i++/i--、+/-、~、!
-
强制类型转换 (int)
算术运算符
- 乘、整除、求模 *、/、%
- 加、减 +、-
位运算符与移位
- 左移、右移、无符号右移 <<、>>、>>>
- 比较、类型判断 <、>、<=、>=、instanceof
- 等于、不等于 ==、!=
- 按位与 &
- 按位异或 ^
逻辑运算符
- 逻辑与(短路) &&
条件与赋值
- 三元运算符(条件运算符) ?:
- 赋值运算符 =、+=、-=、*=、/=、%=、&=、^=、<<=、>>=、>>>=
最低优先级
- 逗号运算符 ,
算术运算符
+加法,-减法,*乘法,/整除,%求模(余),++在自己基础上加1,--在自己基础上减1
++和--
我先用一个代码示范一下
int a = 3;
int b = a++;
int c = ++a;
System.out.println(a);
System.out.println(b);
System.out.println(c);
这里的输出结果是5,3,5
为什么呢?
int a = 3;
int b = a++;//这行代码有两个过程
//1.赋值 b = a
//2.执行 a = a + 1
int c = ++a;//这行代码同样有两个过程
//1.执行 a = a + 1
//2.赋值 c = a
所以输出的a的值是5,b是3,c是5
幂运算
这个需要用到Math.
double pow = Math.pow(2,3);
//注意这里只能用double定义
System.out.print(pow);
赋值运算符
=
关系运算符
<小于,>大于,<=小于等于,>=大于等于,==等于,!=不等于
逻辑运算符
&&与,||或,!非
boolean a = true;boolean b = false;System.out.println("a && b : "+(a&&b));
//两个变量都为true,结果为trueSystem.out.println("a || b : "+(a||b));
//两个变量有一个为true,结果为trueSystem.out.println("! (a && b) : "+!(a&&b));
//如果为真,结果为假;如果为假,结果为真
a && b : false
a || b : true
! (a && b) : true
短路:
System.out.println("a && b : "+(b&&a));
由于b已经为假,那么就不会继续计算a是否为真,直接输出结果
证明:
int c = 5;
boolean b = (c < 4)&&(c++ < 4);
System.out.print(b);
System.out.print(c);
如果计算了(c++<4)那么结果应该为false和6
但输出结果为false和5,说明并没有执行
位运算符
&,|,^,~,>>,<<,>>>
条件运算符
?,:
int score = 80;
String type = score<60?"不及格":"及格";
条件?结果1:结果2
若结满足条件,则赋值结果1,若不满足,则赋值结果2
虽然可以使用if,但是条件运算符更加精简
扩展赋值运算符
+=,-=,*=,/=
a += b;//a = a + b
a -= b;//a = a + b
字符串连接符
只要在+任意一侧出现String类型,往后另一侧会自动转化为String类型
a = 10;
b = 20;
System.out.print(""+a+b);
System.out.print(a+b+"");
输出的结果是1020,30
字符串往后的所有都转化为String类型,字符串往前的所有任然按照原本的数据类型进行计算