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 なければなりません(つまり、booleanまたはBoolean-- 詳細についてはJLS §14.9を参照してください)。

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

!=また、 よりも優先順位が高いため、ここでは 2 番目の括弧のセットが必要であることに注意してください&

于 2013-09-09T17:33:13.803 に答える
3

Javaif(..)句では、たとえば C とは異なり、常に独自の型booleanであるa に評価される必要があります。

そのため0nullなどはブール値にも正の数にも変換されません。本当に必要なものを指定するには、算術比較演算子を含める必要があります。falsetrue

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

if(condition)ブール値を持つ必要があります。

于 2013-09-09T17:33:32.010 に答える