4

我很少碰到 & 和 | 其他代码中的逻辑运算符而不是 || 和 &&。我做了一个快速的研究,因为我从未使用过它们,也不知道它的用途。
A && B 表示如果 A 为假,则不会评估 B,它将返回假。
A & B 表示如果 A 为 false,即使表单也返回 false,也会评估 B。
当然是同一个游戏 | 和||。

我的问题是:如果第一个成员确定评估,那么评估第二个成员是否有意义?我可以想象一个代码,其中第二个成员在 clode 中执行了一些非常重要的逻辑,因此应该对其进行评估,但我怀疑这是不好的做法。制作够吗?并且 & 存在吗?

从评论中说得更清楚:我觉得该程序不是最佳的并且运行良好,或者更好地说:如果必须评估所有逻辑成员,则设计得很好。

4

6 回答 6

6

你忘了按位运算

按位 & 运算符执行按位与运算。

按位 | 运算符执行按位包含 OR 运算。

但是在这里您可以找到无条件 AND 运算符更好的示例:

在哪些情况下最好使用无条件 AND(& 而不是 &&)

于 2013-02-26T13:06:44.690 回答
5

单 & 和 | 不是逻辑运算符,它们是按位和逻辑运算符。

于 2013-02-26T13:06:47.903 回答
2

按位和位移运算符

按位 & 运算符执行按位与运算。
按位 ^ 运算符执行按位异或运算。
按位 | 运算符执行按位包含 OR 运算。

JLS 15.22。位和逻辑运算符

位运算符和逻辑运算符包括 AND 运算符 &、异或运算符 ^ 和包含 OR 运算符 |。块引用

在此处输入图像描述

于 2013-02-26T13:10:20.240 回答
2

您可以使用 | 和 & 如上所述的运算符。一些静态代码分析器会警告您,因为它可能会掩盖可能的问题。在您确实希望评估两个条件的情况下,您可以执行以下操作:

boolean cond1=cond1();
boolean cond2=cond2();
boolean myCond=cond1 && cond2;

如果你只是使用

boolean myCond=cond1()&cond2();

有人一定会为你“纠正”它。所以是的,有些地方你会使用 & 和 |,但很可能这不是一个好主意,为了清楚起见,你可以绕过它。

于 2013-02-26T13:10:24.333 回答
2

想象一下,如果 B 是一个你想一直执行的函数,那么它会很有用。

于 2013-02-26T13:12:00.377 回答
2

我认为这可能是一个很好的例子:

if (initializeConnectionA() & initializeConnectionB() & initializeConnectionC()) {
    performOperation();
} else {
    logger.warn("Not all modules are working properly");
}

方法initializeConnection 连接到即一些可能无法正常工作的外部服务器。您可能不需要全部初始化它们,但如果其中一些不起作用,您希望得到警告。

当然,对于这个问题,它可能不是最清晰的解决方案,但这是 & 运算符可能有用的示例。

于 2013-02-26T13:38:26.687 回答