运算符"&"无法应用于byte、int、boolean类型

7

在我之前的问题中,关于如何比较组合位中是否包含特定位,我遇到了这个错误。

    int flag1 = 1 << 0;
    int flag4 = 1 << 5;

    int combined = flag1 | flag4;

    if (combined & flag1 == flag1) // <-- Operator & cannot be applied to int, boolean

如果我将标志转换为字节,则错误会将int替换为byte


哦,又是一个Java运算符优先级的问题...这确实让我感到困惑!(当然,这仍然比PHP的?:好:P) - minmaxavg
1个回答

16
编译器在您的if语句中看到二进制运算符&,将其视为逻辑AND(因为它期望返回布尔值的表达式),并检查参数的类型。它遇到一个int参数- combined,和一个boolean参数- flag1 == flag1。由于它期望两个布尔参数(&运算符不能应用于int和boolean),所以它会报错。为了使运算符按照期望的顺序进行评估,请添加括号。
if ((combined & flag1 ) == flag1)

谢谢,哈哈,我试着编辑你的帖子,因为我编辑了我的问题。但是你刚更新过;)。AOE应该是flag1flag4中的一个。在我之前的问题中,每个人都给我没有括号的答案,我想知道为什么... - Madmenyo
@MennoGouw 是的,我注意到了你的编辑并将其添加到答案中。 - Eran
感谢您提供非常清晰易懂的答案。我对比特比较和操作还不熟悉,但现在我已经理解了。 - Madmenyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接