我很少碰到&和|其他代码中的逻辑运算符代替||和&&我做了一个快速的研究,因为我从来没有使用它们,也不知道它是什么。
A&& B表示如果A为假,则不会评估B并返回false
A& B表示如果A为假,即使表格也会返回假,也会评估B.
当然这是与|相同的游戏和||。
我的问题是:如果第一个成员首先确定评估,那么评估第二个成员是否有意义?我可以想象一个代码,其中第二个成员在clode中执行一些非常重要的逻辑,因此应该对其进行评估,但我怀疑这是不好的做法。是否足以使|和&存在?
来自评论,以使其更清楚:我感觉程序不是最优的并且运作良好或更好地说:如果要评估所有逻辑成员,那么设计得很好。
答案 0 :(得分:6)
按位&运算符执行按位AND运算。
按位|运算符执行按位包含OR运算。
但是在这里你可以找到无条件AND运算符更好的例子:
What are the cases in which it is better to use unconditional AND (& instead of &&)
答案 1 :(得分:5)
单身&和|他们不是逻辑运算符,而是bitwise and logical运算符。
答案 2 :(得分:2)
来自Bitwise and Bit Shift Operators
按位&运算符执行按位AND运算 按位^运算符执行按位异或运算 按位|运算符执行按位包含OR运算。
来自JLS 15.22. Bitwise and Logical Operators
按位运算符和逻辑运算符包括AND运算符&,异或运算符^,以及包含OR运算符|。 块引用
答案 3 :(得分:2)
您可以使用|和&如上所述,运营商。一些静态代码分析器会警告您,因为它可能会掩盖可能的问题。在您真正想要评估两个条件的情况下,您可以执行以下操作:
boolean cond1=cond1();
boolean cond2=cond2();
boolean myCond=cond1 && cond2;
如果您只是使用
boolean myCond=cond1()&cond2();
有人必须为你“纠正”它。 是的,有些地方你可以使用&和|,但很可能这不是一个好主意,为了清晰起见,你可以绕过它。
答案 4 :(得分:2)
想象一下,如果B是一个你想要一直执行的函数,那么它就会很有用。
答案 5 :(得分:2)
我认为这可能是一个很好的例子:
if (initializeConnectionA() & initializeConnectionB() & initializeConnectionC()) {
performOperation();
} else {
logger.warn("Not all modules are working properly");
}
其中,initializeConnection方法连接到某些外部服务器,这些服务器可能并非全部正常工作。您可能不需要将它们全部初始化,但是如果其中一些不起作用,则需要发出警告。
当然,对于这个问题,它可能不是最清晰的解决方案,但这是一个例子,其中&运算符可能很有用。