1.算数运算符
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数
⚠关于/除法
public static void main(String[] args) {
System.out.println(5/2);//2
System.out.println((float)5/2);//2.5
System.out.println(5/(float)2);//2.5
System.out.println((float)(5/2));//2.0
这个属于异常里面的算数异常
⚠关于%取模
System.out.println(10%3);//1
System.out.println(-10%3);//-1
System.out.println(10%-3);//1
System.out.println((-10%-3));//-1
最后两个也是用除法列式计算
System.out.println(11.5%2);
Java支持%左右两边都是小数,上面这个答案是1.5
2.增量运算符
int a = 4;
double d = 5.0;
double f = a + d;
System.out.println(f);//?
a += d;
System.out.println(a);//?
第一个f是double类型,所以很简单9.0
第二个 a+=d --> a = (int)(a+d)
对于 += 操作符来说,系统会自动进行类型转换
int a = 10;
int b = a++;//b = a, a++
System.out.println(b);//10
System.out.println(a);//11
int a = 10;
int c = ++a;//++a, c = a
System.out.println(a);//11
System.out.println(c);//11
下面这个更奇怪
这和C语言的结果大相径庭(C语言结果是11)
因为Java用的标准表和C语言的不一样
3.关系运算符
⚠输出结果只能是true或者false
⚠不能出现5<a<10这种表达式,因为5<a要么是true或者是false,布尔值没办法和下面的整数10进行比较
⚠在Java中 = 表示赋值, == 表示相等
4.逻辑运算符
&&
||
!(只能和true和false一起表示)
短路求值
表达式1 && 表达式2
两个都是真,整个表达式都是真。假设表达式1为假,此时发生短路,表达式2直接不执行
表达式1 || 表达式2
两个表达式有一个为真,整个表达式为真。假设表达式1为真,发生短路,表达式2直接不执行
System.out.println(10 > 20 && 10 / 0 == 0); // 10>20为假,整个直接为假,打印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 10 < 20为真,整个为真,打印 true
但是& 和 | 不支持短路求值
System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常
System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常
5.位运算符
&按位与 只要对应位上有0,对应就是0
|按位或 只要对应位上有1,对应1
~按位取反 0变1,1变0
^按位异或 对应位相同是0,不同是1
6.移位运算
0000 1011 <<1 -> 0000 0101 5
⚠右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1) 相当于乘以2^n
1111 1111 >>1 -> 1111 1111 -1
⚠无符号右移 >>>: 最右侧位不要了, 最左侧补 0
1111 1111 >>>1 --> 0111 1111
7.条件运算符
第一个?左边表达式是真,跳转到表达式2 false?true:false
表达式2返回false整个表达式就是false