一、认识各类运算符
1、算术运算符
运算符 | 含义 |
+ | 求和 |
- | 相减 |
* | 乘积 |
/ | 商(除) |
% | 求余数(求模) |
++ | 自加一 |
-- | 自减一 |
2、关系运算符
运算符 | 含义 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
注意:所有的关系运算符的运算结果都是布尔类型,不是true就是false,不可能是其他值。
3、逻辑运算符
运算符 | 含义 | 结果 |
& | 逻辑与(可以翻译成并且) | 两边都是true,结果才是true |
| | 逻辑或(可以翻译成或者) | 有一边是true,结果就是true |
! | 逻辑非(取反) | !true = false、!false = true |
&& | 短路与 | 两边都是true,结果才是true |
|| | 短路或 | 有一边是true,结果就是true |
- 使用短路与 && 的时候,当左边的表达式为false的时候,右边的表达式不执行
- 使用短路或 || 的时候,当左边的表达式结果是true的时候,右边的表达式不执行
注意:逻辑运算符两边要求都是布尔类型,并且最终的运算结果也是布尔类型。
4、赋值运算符
运算符 | 含义 |
= | 赋值 |
+= | 加等(原先的基础上加上/追加这个数) |
-= | 减等(原先的基础上减掉后面这个数) |
*= | 乘等(原先的基础上乘以后面这个数) |
/= | 除等(原先的基础上除以后面这个数) |
%= | 模等(取模后、再赋值) |
注意:除了第一个是赋值运算符,其他都是拓展赋值运算符
使用扩展赋值运算符的时候,永远都不会改变运算结果类型。
5、条件运算符
格式:
布尔表达式 ? 表达式1 : 表达式2
因此也叫 三目运算符;
含义:
布尔表达式的结果为true时,表达式1的执行结果作为整个表达式的结果。
布尔表达式的结果为false时,表达式2的执行结果作为整个表达式的结果。
6、字符串连接运算符
运算符:+
+的两个作用 | 作用 | 条件 |
求和 | 当 + 运算符两边都是数字类型的时候,求和 | |
字符串拼接 | 当 + 运算符两边的任意一边是字符串类型,那么这个+会进行字符串拼接操作。 |
二、运算符知识中的难点
1、关于i++和++i
区别:
- 当++出现在变量前,会先自加一,在做赋值运算
- 当++出现在变量后,会先做赋值运算,再自加1
注意点:
特别地,在print中
int c = 90;
System.out.println(c++); // 传,这个“传”在这里有一个隐形的赋值运算。90
//int temp = c++;
//System.out.println(temp);
int d = 80;
System.out.println(++d); //81
//int temp2 = ++d;
//System.out.println(temp2);
int a=0;
int b=a++;
System.out.print(b); //输出为0,原因:在赋值操作时,a++是先赋值再自增
package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Inc inc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i); //0
}
void fermin(int i){
i++;
}
}
// 输出结果为0,原因在于 1、方法中传入的 i,不是 i++中的 i 。 2、方法之后执行的不是 i++,而是 i=i++ 。
总结:
i++和++i:只在赋值操作时不同;在之后的使用时,都是加了1的。
在i++和++i的底层是有差别的,i++会产生一个临时变量,并且i++操作效率相对++i更低。
2、i--和--i
同理