1.算数运算符(+,-,*,/)
注:1.1 两个char字符相加,得到的是对应的ASCII码表中的数值相加
1.2 两个字符串相加,即拼接
2. 自增自减运算符(++, --)
2.1 都只能操作变量,不能操作常量
2.2 前置自增(减)和后置自增(减)
2.2.1 前置自增(++a):先自增,再作运算
2.2.2 后置自增(a++): 先作运算,再自增
2.2.3 前置自减(--a):先自减,再作运算
2.2.4 后置自减(a--): 先作运算,再自减
@Test
public void test() {
int i = 0;
while (i++ < 3) {//先运算,再自增
System.out.println(i);
}
System.out.println("=======分隔符========");
int j = 0;
while (++j < 3) {//先自增,再运算
System.out.println(j);
}
}
运算结果:
1
2
3
=======分隔符========
1
2
对于while(i++ < 3),先进行比较运算,i<3,i的初始值为0,0<3, 为true, 再对i进行自增,i = i +1, i = 1;
对于while(++j < 3),先对j进行自增,j = j + 1, j = 1, 再进行比较运算,1<3, 为true
3. 赋值运算符
3.1 = += -= *= /=
3.2 自带隐式类型转换
4. 比较运算符
4.1 == != > >= < <=
4.2 运算结果只能是true 和 false
5. 三元运算符(三目运算符)
5.1 格式:
数据类型 变量 = 布尔表达式? 值1: 值2;
6. 逻辑运算符
6.1 & | ^ ! && ||
6.2 作用:用于操作两个boolean类型的变量或常量,或结果为boolean类型的表达式, 结果类型也是boolean。
6.3 &与&&
6.3.1 相同点:运算符左右两边的结果均为true,结果为true,否则为false
6.3.1 不同点:&&为短路与,即当第一个结果为false时,右边的表达式将不再做处理,直接返回false。&会对两边都进行运算比较。
所以在做逻辑运算时,一般用&&,效率更高,&一般用于计算位运算
6.4 |与||
6.4.1 相同点:运算符左右两边的结果有一个是true时,结果就位true,两边均为false才为false
6.4.2 不同点: ||为短路或,即当第一个结果为true时,右边的表达式将不再做处理,直接返回true。|会对两边都进行运算比较。
所以在做逻辑运算时,一般用||,效率较高
6.5 ^
6.5.1 ^为异或,即两边结果相同时为false,两边处理结果不相同时,为true。即两边处理结果都为true,或都为false,则结果为false,否则为true
6.6 !
6.6.1 取反
7. 位运算符(对二进制数进行计算)
7.1 & | ^ ~
7.1.1 & 两个均为1,结果为1,否则为0
7.1.2 | 两个有一个为1,结果为1,两边均为0,结果为0
7.1.3 ^ 两边数同为0或1时,结果为0,两边数不相同时,结果为1
7.1.4 ~ 取反
7.2 << >> >>>
7.2.1 << 左移
7.2.2 >> 右移
7.2.2.1 做二进制运算时操作的全是二进制的补码,正数的原码,反码,补码均相同,负数的不同
7.2.2.2 对于右移>>操作,正数用0填充,负数用1填充
计算: -16 >> 3 (32位)
-16: 原码: 10000000_00000000_00000000_00010000
反码: 11111111_11111111_11111111_11101111
补码: 11111111_11111111_11111111_11110000
-16>>3 右移3位: (因为是负数,所以以1补位)
补码: 11111111_11111111_11111111_11111110
反码: 11111111_11111111_11111111_11111101
原码: 10000000_00000000_00000000_00000010
结果为:-2
7.2.3 >>> 无符号右移
7.2.3.1 做二进制运算时操作的全是二进制的补码,正数的原码,反码,补码均相同,负数的不同
7.2.3.2 对于无符号右移>>>操作,无论正数和负数,都用0补位
计算: -16 >>> 3 (32位)
-16: 原码: 10000000_00000000_00000000_00010000
反码: 11111111_11111111_11111111_11101111
补码: 11111111_11111111_11111111_11110000
-16>>>3 无符号右移3位: (以0补位)
补码: 00011111_11111111_11111111_11111110(为正数)
反码: 00011111_11111111_11111111_11111110
原码: 00011111_11111111_11111111_11111110
结果为: 536870910
7.2.4 利用异或(^)运算修改两个变量的值
a^=b;
b^=a;
a^=b;