2

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

./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 中的布尔变量,那么为什么我会收到一条错误消息?

4

3 回答 3

14

里面的表达式if 必须显式地是一个布尔值(即,booleanBoolean-- 参见JLS §14.9了解更多细节):

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

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

于 2013-09-09T17:33:13.803 回答
3

在 Java中if(..),子句必须始终评估boolean它自己的类型,这与在 C 中不同。

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

于 2013-09-09T17:34:26.920 回答
1
if (a & c)  wont work here;

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

于 2013-09-09T17:33:32.010 回答