我的代码中有以下行: -
if (( checker & (1 << val)) ) return false;
其中检查器的类型为int
,val的类型为int
。当我尝试编译时,我得到以下内容: -
q11.java:38: incompatible types
found : int
required: boolean
if (( checker & (1 << val)) ) return false;
^
1 error
但是,如果我将代码修改为: -
if (( checker & (1 << val)) > 0 ) return false;
然后我就可以编译源了。但是,我无法理解为什么代码最初不起作用。关于为什么会发生这种情况的一些指示?
答案 0 :(得分:3)
&
是一个应用于两个整数(在if条件中)生成另一个整数的一元。但是,Java在条件中需要boolean
个值。
答案 1 :(得分:2)
在Java中,您的条件必须是布尔值,即true或false。它不能是另一种类型。
如果val == 31,您的测试应该如下。
if ((checker & (1 << val)) != 0) return false;
BTW C没有这样的布尔类型。它使用int值。
答案 2 :(得分:1)
与C和C ++不同,if
采用整数(在许多其他类型中)并将零解释为false
,Java需要if
,while
等中的布尔表达式。由于&
是一个产生整数的运算,因此第一个表达式在if
的条件下无效。
当您在Java中重写C条件时,需要添加!= 0
,而不是> 0
。否则,将最高位设置为1
的整数将无法通过检查。