赋值运算符
注意:扩展的赋值运算符隐含了强制类型转换
自增自减运算符
注意事项:
++和--既可以放在变量后边,也可以放在变量的前边
单独使用的时候,++和--无论是放在变量前边还是后边,结果都是一样的。
参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。
参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
最常见的用法:单独使用
关系运算符
注意事项:关系运算符的结果都是boolean
类型,要么是true,要么是false。
- == 是一个Java的关系运算符,表示等价的意思,反之 != 表示不等价。
- 如果基本类型要进行值比较那么只能用== 和 !=,而不能用equals()
- == 和 !=当然也适合引用类型比较,但是比较的不是值,而是所指向的引用地址!(也可以理解成是否指向同一个对象)
equals
- 首先equals()方法是Object类下的方法,因此基本类型无法使用。
- equals()返回值是布尔类型。
- 默认的情况下,比较的是对象的引用是否指向同一块内存地址。对象实例化时,即给对象分配内存空间,该内存空间的地址就是内存地址。使用方法如:dog.equals(dog2);
a.equals(b), a 是null, 抛出NullPointException异常。
a.equals(b), a不是null, b是null, 返回false
Objects.equals(a, b)比较时, 若a 和 b 都是null, 则返回 true, 如果a 和 b 其中一个是null, 另一个不是null, 则返回false。注意:不会抛出空指针异常。
不为null的定值和可能为null的变量使用equals比较,一定要定值在前面,变量在后面
逻辑运算符
短路逻辑运算符
注意事项:
- &&短路与:如果条件1为false,则不会继续判断条件2,结果为false, 效率高
- & 逻辑与:无论条件1是否为false,都会继续判断条件2,结果为false,效率低
- || 短路或 :如果条件1为true,则不会继续判断条件2,结果为true, 效率高
- | 逻辑或 :无论条件1是否为true,都会继续判断条件2,结果为true,效率低
最常用的逻辑运算符:&&
、||
、!
三元运算符
if…else语句
if…else…if结构
for循环语句
switch语句
格式说明:
表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值
break:表示中断,结束的意思,用来结束switch语句
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行过程中,遇到break就会结束。
如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉。
注意事项:在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值得情况下,向下运行,直到遇到break,或者整体switch语句结束
While循环语句
do…while语句
跳转控制语句
continue
:用于在循环中,基于条件控制,跳过某次循环内容的执行,继续下一次的执行break
:用于在循环中,基于条件控制,终止循环内容的执行,也就是说结束当前整个循环
循环嵌套
使用for循环处理数据:
- 优势:使用for循环遍历两个List,可以直接按顺序逐个比较元素,适用于简单的数据处理逻辑。
- 适用场景:当数据量较小,且处理逻辑简单时,使用for循环处理数据是一种简单且高效的方式。
将后面一个List处理成Map类型:
- 优势:将后面一个List转换成Map类型,可以通过键值对的方式快速查找元素,提高查找效率,特别是在需要频繁查找的情况下。
- 适用场景:当数据量较大,且需要频繁查找或根据某个属性进行关联操作时,将后面一个List转换成Map类型可以提高效率。
如果数据量较小且处理逻辑简单,使用for循环处理数据是简单高效的选择。而当数据量较大且需要频繁查找或关联操作时,将后面一个List转换成Map类型可以提高效率。