在java中正确使用&

use*_*994 0 java

if ( 25 <= si & < 30 )
Run Code Online (Sandbox Code Playgroud)

没有工作,我无法找到正确使用&的谷歌信息的方法.

出现的错误消息表明它希望>在哪里.

Ste*_*n C 8

正确的语法是

if ( 25 <= si & si < 30 )
Run Code Online (Sandbox Code Playgroud)

请注意,不是使用按位&操作!!

在此上下文中,&运算符的LHS和RHS 是布尔值,因此Java将使用非短路逻辑AND运算.

你也可以这样写:

if ( 25 <= si && si < 30 )
Run Code Online (Sandbox Code Playgroud)

...即使用短路逻辑AND运算符.

你应该使用哪种形式?

  • 从语义的角度来看,&并且&&都会给出正确的答案,因为LH和RH子表达式是无副作用的.

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

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