做|和&在java中有意义吗?

时间:2013-02-26 13:05:35

标签: java logical-operators

我很少碰到&和|其他代码中的逻辑运算符代替||和&&我做了一个快速的研究,因为我从来没有使用它们,也不知道它是什么。
A&& B表示如果A为假,则不会评估B并返回false A& B表示如果A为假,即使表格也会返回假,也会评估B. 当然这是与|相同的游戏和||。

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

来自评论,以使其更清楚:我感觉程序不是最优的并且运作良好或更好地说:如果要评估所有逻辑成员,那么设计得很好。

6 个答案:

答案 0 :(得分:6)

您忘记了bitwise operations

  

按位&运算符执行按位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运算符|。   块引用

enter image description here

答案 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方法连接到某些外部服务器,这些服务器可能并非全部正常工作。您可能不需要将它们全部初始化,但是如果其中一些不起作用,则需要发出警告。

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