0
if ( 25 <= si & < 30 )

不工作,我无法找到一种方法来谷歌有关正确使用 & 的信息。

出现的错误消息说它期望 > 是 & 所在的位置。

4

3 回答 3

8

正确的语法是

if ( 25 <= si & si < 30 )

请注意,不是使用按位&运算!!

在这种情况下,运算符的 LHS 和 RHS&是布尔值,因此 Java 将使用非短路逻辑 AND 操作。

你也可以这样写:

if ( 25 <= si && si < 30 )

...即使用短路逻辑与运算符。

你应该使用哪种形式?

  • 从语义的角度来看,&and&&都会给出正确的答案,因为 LH 和 RH 子表达式没有副作用。

  • 从性能的角度来看,我希望 JIT 编译器将这两个版本优化为相同(或等效执行)的本机代码。但是,如果优化器不这样做,那么在整个应用程序的上下文中考虑时,两个版本之间的性能差异很可能可以忽略不计。

  • 从可读性的角度来看,&&表单可能更好……但这只是因为许多 Java 程序员会误读&表单,因为他们不明白& 在 Java中不一定是按位的!

于 2012-09-08T00:15:13.227 回答
0

请注意,<, <=,>>=是二元运算符,两边都需要一个整数值。编译器正在抱怨,因为在 if 条件中,在 the&和 the之间没有任何内容。<

&此外,您应该了解和运算符之间的区别&&。(我已经更正了我认为的区别。有关详细信息,请参阅Java 规范中的15.22.2. Boolean Logical Operators &、^ 和 |15.23. Conditional-And Operator &&。)

综上所述,正确的代码是

if (25 <= si && si < 30) 

最后,对于以后的问题,如果您复制并粘贴确切的错误消息,我们回答您的问题将非常有帮助。通常,释义会丢失我们需要帮助您的许多细节。

于 2012-09-08T00:10:19.750 回答
-1

与所有 Java 布尔运算符一样,您需要使用该符号两次

&&是为了和

|| is for or

因此,您的解决方案应该是

(25 <= si && si < 30)

这意味着大于或等于 25 且小于 30 (si = 25 || 26 || 27 || 28 ||29)

于 2012-09-08T00:13:13.110 回答