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