2012-09-08 106 views
0
if (25 <= si & < 30) 

不能正常工作,我找不到正确使用&的google信息的方法。正确使用&in java

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

回答

0

注意<<=>>=是需要双方一个整数值的二元运算符。编译器抱怨,因为在if条件中&<之间没有任何东西。

此外,您应该了解运营商&&&之间的区别。 (我已经纠正了我的想法差异。见15.22.2. Boolean Logical Operators &, ^, and |15.23. Conditional-And Operator &&在Java规范的细节。)

与所有的放在一起,正确的代码是

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

最后,对于未来如果您复制并修改了确切的错误消息,那么这对我们回答您的问题将会非常有帮助。通常,解释失去了我们需要帮助你的许多细节。

+0

'&'的确是合乎逻辑的,并且看到http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2 –

+0

@SteveKuo谢谢为了指出这一点。我已经修复了我的答案;-) –

-1

正如你需要使用符号两次

&&是所有Java布尔运营商和

|| is for or 

因此您的解决方案应该是

(25 <= si && si < 30) 

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

+1

不,&&是逻辑的,其中'&&'是短路版本。请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2 –

8

正确的语法是

if (25 <= si & si < 30) 

注意这是使用位&操作!

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

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

...即:

你也可以这样写。

您应该使用哪种形式?

  • 从语义的角度来看,&&&都将得到正确的答案,因为左,右子表达式是免费的副作用。从性能的角度来看,我期望两个版本能够被JIT编译器优化为相同(或等效执行)的本地代码。但是,如果优化器不这样做,则在完整应用程序的上下文中考虑时,两个版本之间的性能差异很可能可以忽略不计。

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

+0

您的最后一点是正确的,只需看看所有其他答案,即错误地指出'&'不是合乎逻辑的。 –

+0

我的答案已修复。我会很感激撤消投票。 (如果是你的,那就是) –

+0

@代码大师 - 事实并非如此。此外,我不知道你的评论与你的评论有关>>我的<<答案... –