我刚收到以下编译错误:
./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中的布尔变量,为什么我会收到错误消息?
答案 0 :(得分:14)
if
中的表达式必须显式为布尔值(即boolean
或Boolean
- 有关详细信息,请参阅JLS §14.9 :
if ((a & c) != 0) {
另请注意,此处需要第二组括号,因为!=
的优先级高于&
。
答案 1 :(得分:3)
在Java if(..)
子句中,必须始终将boolean
评估为其自己的类型,而不像C语言。
因此,0
,null
等不转换为布尔false
,正数转换为true
等等等等等等等。您必须包含算术比较运算符以指定您真正想要的内容。
答案 2 :(得分:1)
if (a & c) wont work here;
if(condition)
需要有一个布尔值。