我一直认为Java中的&&操作符用于验证其布尔操作数是否为真,并且&操作符用于对两个整数类型进行逐位操作。
最近我知道&运算符也可以用来验证它的两个布尔操作数是否为真,唯一的区别是即使LHS操作数为假,它也会检查RHS操作数。
Java中的&操作符内部重载吗?或者这背后还有其他的概念吗?
我一直认为Java中的&&操作符用于验证其布尔操作数是否为真,并且&操作符用于对两个整数类型进行逐位操作。
最近我知道&运算符也可以用来验证它的两个布尔操作数是否为真,唯一的区别是即使LHS操作数为假,它也会检查RHS操作数。
Java中的&操作符内部重载吗?或者这背后还有其他的概念吗?
当前回答
' && ': -是一个逻辑与运算符,根据其参数的逻辑关系产生一个布尔值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
其他回答
对于布尔值,两者之间没有输出差异。你可以交换&&和&或||和|,它永远不会改变表达式的结果。
区别在于处理信息的场景背后。当你对a= 0和b = 1的表达式“(a != 0) & (b != 0)”进行右转时,会发生以下情况:
left side: a != 0 --> false
right side: b 1= 0 --> true
left side and right side are both true? --> false
expression returns false
当你写一个表达式(a != 0) && (b != 0)当a= 0和b = 1时,会发生以下情况:
a != 0 -->false
expression returns false
更少的步骤,更少的处理,更好的编码,特别是在处理许多布尔表达式或复杂的参数时。
' && ': -是一个逻辑与运算符,根据其参数的逻辑关系产生一个布尔值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
除了&&和||是短路外,在混合这两种形式时,还要考虑运算符优先级。 我认为每个人都不会立即看出result1和result2包含不同的值。
boolean a = true;
boolean b = false;
boolean c = false;
boolean result1 = a || b && c; //is true; evaluated as a || (b && c)
boolean result2 = a | b && c; //is false; evaluated as (a | b) && c
除了对两个操作数求值不是一个懒惰的求值器之外,我认为位操作符的主要特征是比较操作数的每个字节,如下例所示:
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
&&是短路运算符,而&是与运算符。
试试这个。
String s = null;
boolean b = false & s.isEmpty(); // NullPointerException
boolean sb = false && s.isEmpty(); // sb is false