if ( 25 <= si & < 30 )
无效,我无法找到正确使用&amp;的谷歌信息。
出现的错误消息表明它预计&gt;在哪里&amp;是
答案 0 :(得分:8)
正确的语法是
if ( 25 <= si & si < 30 )
请注意这是 NOT 使用按位&
操作!!
在此上下文中,&
运算符的LHS和RHS是布尔值,因此Java将使用非短路逻辑AND运算。
您也可以将其写为:
if ( 25 <= si && si < 30 )
...即使用短路逻辑AND运算符。
您应该使用哪种表格?
从语义角度来看,&
和&&
都会给出正确答案,因为LH和RH子表达式是无副作用的。
从性能的角度来看,我希望JIT编译器将这两个版本优化为相同(或等效的)本机代码。但是,如果优化器不这样做,那么在完整应用程序的上下文中考虑时,两个版本之间的性能差异很可能是微不足道的。
从可读性的角度来看,&&
形式可能更好......但只是因为许多Java程序员会误读&
形式,因为他们不理解{{1} Java中的 不一定是按位的!
答案 1 :(得分:0)
请注意,<
,<=
,>
和>=
是二元运算符,需要两边的整数值。编译器抱怨,因为if条件中&
和<
之间没有任何内容。
此外,您应该了解&
和&&
运算符之间的区别。 (我已经纠正了我认为不同之处。有关详细信息,请参阅Java规范中的15.22.2. Boolean Logical Operators &, ^, and |和15.23. Conditional-And Operator &&。)
把所有这些放在一起,正确的代码是
if (25 <= si && si < 30)
最后,对于将来的问题,如果您复制并填充完全错误消息,我们将非常有帮助回答您的问题。通常,释义会失去我们需要帮助你的大部分细节。
答案 2 :(得分:-1)
与所有Java布尔运算符一样,您需要使用符号两次
即&&
用于和
|| is for or
因此,您的解决方案应该是
(25 <= si && si < 30)
这意味着is大于或等于25且小于30(si = 25 || 26 || 27 || 28 || 29)