引言
平时在后端开发或者在做算法题中,我们经常用到&,&&和|,||这两个符号,但是你真的了解清楚这四个符号的作用和误区了吗?本文带你一站式搞懂。
&😯
按位与
作为按位与运算符:
- 对两个整数的每一位进行“与”操作。
- 如果两个对应的位都为 1,则结果为 1;否则为 0
int a = 5 & 3; // 二进制:0101 & 0011 = 0001 → 结果是 1
逻辑与(不常用)
在 Java 中,& 也可以用于布尔值之间的逻辑与操作,但它不会短路(即无论左边是否为 false,右边都会执行),这点要尤其引起注意,可以与&&进行区分
boolean result = (a > 0) & (b++ < 10); // 即使第一个条件为 false,b++ 也会执行
&&😫
这个符号一般不用于按位与运算,只用于逻辑与运算,会短路,基于这个特性,在后端开发中可以大量使用他进行逻辑与,有优化性能的作用。
- 如果第一个表达式为
false,则不会继续计算后面的表达式。 - 常用于避免错误或优化性能。
if (obj != null && obj.isValid()) { // 如果 obj 为 null,就不会执行 obj.isValid(),防止 NullPointerException }
|😗
按位或
- 对两个整数的每一位进行“或”操作。
- 如果两个对应的位有一个为 1,则结果为 1;否则为 0
int a = 5 | 3; // 二进制:0101 | 0011 = 0111 → 结果是 7
逻辑或(不常用)
在 Java 中,| 也可以用于布尔值之间的逻辑或操作,但它不会短路(即无论左边是否为 true,右边都会执行),所以用于逻辑或运算性能有损耗。
boolean result = (a > 0) | (b++ < 10); // 即使第一个条件为 true,b++ 也会执行
|| 😎
是一种短路逻辑或运算符:
- 如果第一个表达式为
true,则不会继续计算后面的表达式。 - 常用于简化代码或避免不必要的操作
if (user == null || user.isGuest()) { // 如果 user == null 成立,就不会执行 user.isGuest() }
tips😊
- 大家在开发中请尽量使用&&和||,可以提高接口性能。
- 在开发和刷算法题中,请将判空或者防止越界的操作放在前面(当使用&&和||时),防止空指针异常或者发生越界等
总结❤️
如果你看了这篇文章有收获可以点赞+关注+收藏🤩,这是对笔者更新的最大鼓励!如果你有更多方案或者文章中有错漏之处,请在评论区提出帮助笔者勘误,祝你拿到更好的offer!