为什么我的按位操作不适用于Java中的`int`s?

时间:2013-09-09 17:31:26

标签: java

我刚收到以下编译错误:

./package/path/FrameScreenPosition.java:80: incompatible types
found   : int
required: boolean
    if (frame.getExtendedState() & Frame.MAXIMIZED_BOTH) {
                                 ^

'扩展状态'是各种不同状态的按位掩码,例如最大化或图标化,我试图测试帧是否最大化。以下简短示例产生了类似的错误:

public class BitTest
{
  public static void main(String[] args)
  {
    int a = 1;
    int c = 3;

    if (a & c) {
      System.out.println("This is right.");
    }
  }
}

我见过的所有内容都表明按位运算符&不限于Java中的布尔变量,为什么我会收到错误消息?

3 个答案:

答案 0 :(得分:14)

if 中的表达式必须显式为布尔值(即booleanBoolean - 有关详细信息,请参阅JLS §14.9

if ((a & c) != 0) {

另请注意,此处需要第二组括号,因为!=的优先级高于&

答案 1 :(得分:3)

在Java if(..)子句中,必须始终将boolean评估为其自己的类型,而不像C语言。

因此,0null转换为布尔false,正数转换为true等等等等等等等。您必须包含算术比较运算符以指定您真正想要的内容。

答案 2 :(得分:1)

if (a & c)  wont work here;

if(condition)需要有一个布尔值。