单身人士将始终检查这两个条件。如果双精度值的计算结果为 false,它将在第一个条件之后停止。使用2是一种“短路”条件检查,如果你真的只需要1个条件2是真还是假。&
&&
例如:
if (myString != null && myString.equals("testing"))
如果是,第一个条件将失败,并且不会费心检查它的值。这是避免空指针的一种方法。myString
null
- with 和两个操作数始终被计算
&
¦
- with 和第二个操作数仅在必要时才计算
&&
¦¦
这是一个页面的链接,该页面很好地解释了如何使用这些内容。
其他答案在某种程度上是正确的,但不能解释整个事情。
首先,双精度运算符和 , 的功能有点像嵌套语句:&&
||
if
if (expression_a && expression_b) {
do_something;
}
等效于
if (expression_a) {
if (expression_b) {
do_something;
}
}
在这两种情况下,如果评估到那么将不会被评估 - 一种称为“短路”的特征。(情况类似,但头发更复杂。expression_a
false
expression_b
||
此外,在 Java 中(但不在 C/C++ 中),和 运算符仅适用于布尔值 - 您不能在 , 例如上使用 或 。&&
||
&&
||
int
另一方面,单运算符和是相对“纯”运算符(相对于自身的交换和关联),没有双运算符的“短路”。此外,它们可以对任何整数类型进行操作 - 布尔值,字符,字节,短整型,整数型,长整型。它们执行逐位运算 -- 左操作数的位 N 与右操作数的位 N 一起被 ANDed 或 ORed,以产生与两个操作数的位宽度相同的结果值中的第 N 位(在它们根据二进制运算符的需要加宽之后)。在这方面,它们的操作只是退化的情况(尽管有些特殊情况)。&
|
boolean
通常,人们只使用双精度运算符来组合语句中的布尔表达式。如果所涉及的布尔表达式是“安全的”(不能导致空指针异常,例如),则使用单个运算符不会有很大的危害,但是双精度运算符往往效率略高,并且通常需要短路(例如),因此通常明智的做法是培养使用双精度形式的习惯。唯一需要注意的是,如果您希望计算第二个表达式(因为它的副作用),则双精度运算符将不能保证发生这种情况。if
if (a != null && a.b == 5)