我一直认为Java中的&&操作符用于验证其布尔操作数是否为真,并且&操作符用于对两个整数类型进行逐位操作。

最近我知道&运算符也可以用来验证它的两个布尔操作数是否为真,唯一的区别是即使LHS操作数为假,它也会检查RHS操作数。

Java中的&操作符内部重载吗?或者这背后还有其他的概念吗?


当前回答

除了对两个操作数求值不是一个懒惰的求值器之外,我认为位操作符的主要特征是比较操作数的每个字节,如下例所示:

int a = 4;
int b = 7;
System.out.println(a & b); // prints 4
//meaning in an 32 bit system
// 00000000 00000000 00000000 00000100
// 00000000 00000000 00000000 00000111
// ===================================
// 00000000 00000000 00000000 00000100

其他回答

' && ': -是一个逻辑与运算符,根据其参数的逻辑关系产生一个布尔值true或false。

例如:—Condition1 && Condition2

如果Condition1为假,那么(Condition1 && Condition2)将始终为假,这就是为什么这个逻辑运算符也被称为短路运算符的原因,因为它不计算另一个条件。如果条件1为假,则不需要计算条件2。

如果条件1为真,则评估条件2,如果它为真,则总体结果为真,否则为假。

' & ': -是位与运算符。如果两个输入位都为1,则在输出中产生1(1)。否则产生0(0)。

例如:-

int = 12;// 12的二进制表示是1100

int b = 6;// 6的二进制表示是0110

Int c=(a & b);//(12 & 6)的二进制表示为0100

c是4。

如需参考,请参阅http://techno-terminal.blogspot.in/2015/11/difference-between-operator-and-operator.html

这取决于参数的类型……

对于整数参数,单个&号(“&”)是“逐位AND”操作符。双&号(“&&”)只用于两个布尔参数。

对于布尔参数,单个&号构成(无条件)“逻辑与”运算符,而双&号(“&&”)是“条件逻辑与”运算符。也就是说,单&号总是计算两个参数,而双&号只在第一个参数为真时计算第二个参数。

对于所有其他参数类型和组合,应该发生编译时错误。

&是位运算符加号,用于检查两个条件,因为有时我们需要同时计算两个条件。 但是,当第一个条件为真时,逻辑运算符&&则进入第二个条件。

& <——验证两个操作数 && <——如果第一个操作数求值为false,则停止求值,因为结果将为false

(x != 0) & (1/x > 1) <——这意味着求(x != 0)然后求(1/x > 1)然后执行&。问题是当x=0时,这会抛出异常。

(x != 0) && (1/x > 1) <——这意味着求(x != 0),只有当它为真时,才求(1/x > 1),所以如果你有x=0,那么这是完全安全的,并且不会抛出任何异常,如果(x != 0)求值为假,整个事情直接求值为假,而不求(1/x > 1)。

编辑:

exprA | exprB <——这意味着评估exprA然后评估exprB,然后执行|。

exprA || exprB <——这意味着评估exprA,只有当这是假的,然后评估exprB,并执行||。

除了对两个操作数求值不是一个懒惰的求值器之外,我认为位操作符的主要特征是比较操作数的每个字节,如下例所示:

int a = 4;
int b = 7;
System.out.println(a & b); // prints 4
//meaning in an 32 bit system
// 00000000 00000000 00000000 00000100
// 00000000 00000000 00000000 00000111
// ===================================
// 00000000 00000000 00000000 00000100