你真的懂得 & ,&&和 |,|| 吗?

321 阅读2分钟

引言

平时在后端开发或者在做算法题中,我们经常用到&,&&和|,||这两个符号,但是你真的了解清楚这四个符号的作用和误区了吗?本文带你一站式搞懂。

&😯

按位与

作为按位与运算符

  • 对两个整数的每一位进行“与”操作。
  • 如果两个对应的位都为 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😊

  1. 大家在开发中请尽量使用&&和||,可以提高接口性能。
  2. 在开发和刷算法题中,请将判空或者防止越界的操作放在前面(当使用&&和||时),防止空指针异常或者发生越界等

总结❤️

如果你看了这篇文章有收获可以点赞+关注+收藏🤩,这是对笔者更新的最大鼓励!如果你有更多方案或者文章中有错漏之处,请在评论区提出帮助笔者勘误,祝你拿到更好的offer!