我一直认为Java中的&&操作符用于验证其布尔操作数是否为真,并且&操作符用于对两个整数类型进行逐位操作。
最近我知道&运算符也可以用来验证它的两个布尔操作数是否为真,唯一的区别是即使LHS操作数为假,它也会检查RHS操作数。
Java中的&操作符内部重载吗?或者这背后还有其他的概念吗?
我一直认为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