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

Joh*_*ers 2 java

我刚刚得到以下编译器错误:

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

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

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

    if (a & c) {
      System.out.println("This is right.");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

ars*_*jii 14

内部表达式if 必须显式为布尔值(即,boolean或者Boolean- 有关更多详细信息,请参阅JLS§14.9):

if ((a & c) != 0) {
Run Code Online (Sandbox Code Playgroud)

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