🐵由于Java的操作符和C语言的操作符有很多相同之处,所以本篇文章只讲解Java操作符的重点和与C语言的不同点
1.做除法和取模时右操作数不能为0;
2.取模的有操作数可以是double类型,但是没有意义,一般对整形进行取模;
3.当操作符两边的操作数不同时,向范围小的向范围大的类型提升
4.当操作符两边的操作数大小小于4个字节时,会先提升到int型在进行计算
+=、-=、*=、/=、%=
++、--
==、!=、>、<、>=、<=
关系操作符的运算结果是boolean类型
- int a = 10;
- int b = 20;
- System.out.println(a == b); //打印结果:false
&&、||、!
逻辑操作符的运算结果是boolean类型
其中!后面必须是布尔表达式,不能有以下写法:
- if (!a) { //编译报错
- ...
- }
-
- while (!a) { //编译报错
- ...
- }
表达式1 && 表达式2:当表达式1结果为false,则整个表达式结果就为false,无需计算表达式2
表达式1 || 表达式2:当表达式1结果为true,则整个表达式结果就为true,无需计算表达式2
&、|、~、^
<<、>>、>>>
<<(左移操作符):二进制比特位左侧位舍去,右侧位取0
- int a = 10;//1010
- System.out.println(a << 1);//20
- int b = -10;
- System.out.println(b << 1);//-20
- int c = 1;
- System.out.println(c << 2);//4
总结:一个整数左移n位,相当于这个数乘上2^n;
>>(右移操作符):二进制比特位右侧位舍去,左侧位取符号位
>>>(无符号右移操作符):二进制比特位右侧位舍去,左侧位取0
表达式1 ? 表达式2 : 表达式3
1.表达式2和表达式3需要是同类型的,除非会进行自动类型转换(隐式)或我们主动进行强制类型转换,否则会报错
- int a = 10;
- int b = 20;
- double c = 1;
- int ret = a < b ? (int)c : b;
-
- int a = 10;
- int b = 20;
- byte c = 5;
- int ret = a < b ? c : b; //c会自动类型转换为int型
2.条件运算表达式不能单独存在,其结果必须被使用,否则会报错
- if ((a < b ? c : b) > 1) { //被使用
- ...
- }
-
- int ret = a < b ? c : b //被使用
例题:
System.out.println(false == true ? true : true == false ? false : false);
由于表达式1的结果为false,所以执行表达式3,表达式3的结果为false,所以整个表达式的结果为false
🙉本篇文章至此结束,有许多操作符都没有进行讲解是因为在之前的文章《操作符重点讲解》有过详细讲解