运算符
算数运算符
运算符 | 运算 |
---|---|
+ | 正 |
- | 负 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余运算 |
++ | 自增1 自增1不会改变本身变量的数据类型 (前)++:先自增1,然后再运算 (后)++:先运算,后自增1 |
- - | 自减1 自减1不会改变本身变量的数据类型 (前)–:先自减1,然后再运算 (后)–:先运算,后自减1 |
赋值运算符
=
int i1 = 10;
int j1 = 10;
int i2,j2;
//连续赋值
i2 = j2 = 10;
int i3 = 10,j3 = 20;
不会改变本身的数据类型
+=
int num1 = 10;
num1 += 2;//num1 = num1 + 2
System.out.printlin(num1);//12
-=
*=
/=
%=
int num2 = 12;
num2 %= 5;//num1 = num1 % 5
System.out.printlin(num2);//2
比较运算符
比较运算符的结果是boolean类型
运算符 | 运算 |
---|---|
== | 相等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
instanceof | 检查是否是类的对象 |
int i = 10;
int j = 20;
System.out.println(i == j);//false
System.out.println(i = j);//20
逻辑运算符
说明:
1、逻辑运算符操作的都是boolean类型的变量
& 逻辑与
| 逻辑或
! 逻辑非
&& 短路与
|| 短路或
^ 逻辑异或
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
区分& 与 &&
相同点1:& 与&& 的运算结果相同
相同点2:当符号左边是true时,二者都会执行符号左边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行符号右边的运算
区分| 与 ||
相同点1:|与|| 的运算结果相同
相同点2:当符号左边是false时,二者都会执行符号左边的运算
不同点:当符号左边是true时,|继续执行符号右边的运算,||不再执行符号右边的运算
位运算符
结论:
1、位运算符操作的都是整型的数据
2、<<:在一定范围内,每向左移一位,相当于*2
>>:在一定范围内,每向右移一位,相当于 /2
面试题:最高效的计算2 * 8 ? 2<<3 或 8<<1
运算符 | 运算 | 范例 |
---|---|---|
<< | 左移 | 左移n位就是在原来的数字上乘2的n次方 |
>> | 右移 | 最高位根据原来的最高位来补,不是直接补0 |
>>> | 无符号右移 | 被以为二进制最高位无论是0或者1,都用0补 |
& | 与运算 | 二进制位进行&运算 |
| | 或运算 | 二进制位进行|运算 |
^ | 异或运算 | 二进制位进行^运算 |
//练习:交换两个变量的值
int num1 = 10;
int num2 = 20;
//方式一:定义临时变量的方式
//推荐的方式
int temp = num1;
num1 = num2;
num2 = temp;
//方式二:好处:不用定义临时变量
//弊端:相加操作可能超出存储范围 ;有局限性:只能适用于数值类型
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
//方式3:使用位运算符
//有局限性:只能适用于数值类型
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
三元运算符
1、结构:(条件表达式)?表达式1:表达式2
2、说明
1)条件表达式的结果为boolean类型
2)根据条件表达式真或假,决定执行表达式1,还是表达式2
如果表达式为true,则执行表达式1
如果表达式为false,则执行表达式2
3) 表达式1和表达式2的要求是一致的
4)三元运算符可以嵌套使用
3、凡是可以使用三元运算符的地方,都可以改写成if else
4、如果程序既可以使用三元运算符,又可以使用if-else,那么有限选择三元运算符。
//获取两个正数的较大值
int m = 12;
int n = 5;
int max = (m > n)? m : n;
double num = (m > n)? 2 : 1.0;
//(m > n)? 2 :"n大" ;//编译错误
String maxStr = (m > n )?"m大":((m == n)?"m和n相等": "n大");
运算符的优先级
注意用()