我知道这里有很多答案,但它们似乎都有点混乱。因此,在从Java Oracle学习指南中进行了一些研究之后,我提出了三种不同的场景来说明何时使用&or&。这三种情况是逻辑与, 按位和,和布尔和.
合乎逻辑,并:逻辑和(也称为条件和)使用&&接线员。这是短路的意思:如果左操作数是假的,那么右操作数将不会被计算.
例子:
int x = 0;
if (false && (1 == ++x) {
System.out.println("Inside of if");
}
System.out.println(x); // "0"
在上面的示例中,输出到x控制台的值为0,因为if语句中的第一个操作数为false,因此java不需要计算(1=+x),因此不计算x。
按位和:并使用&接线员。它用于对值预先形成按位操作。通过查看二进制数字(例如:
int a = 5; // 5 in binary is 0101
int b = 12; // 12 in binary is 1100
int c = a & b; // bitwise & preformed on a and b is 0100 which is 4
正如您在这个例子中所看到的,当数字5和12的二进制表示排列在一起时,一个按位和预格式化的数字只会产生一个二进制数,其中两个数字中的相同数字都有一个1。因此,0101&1100=0100。小数是5&12=4。
布尔和:现在,布尔和运算符的行为与按位和逻辑以及逻辑和。我喜欢把它看作是按位和在两个布尔值(或比特)之间预先形成的,因此它使用&接线员。布尔值也可以是逻辑表达式的结果。
它返回一个真值或假值,与逻辑值非常相似,但与逻辑值不同,它不是短路的。原因是,为了使它预先按位表示,它必须知道左操作数和右操作数的值。这里有个前男友:
int x = 0;
if (false & (1 == ++x) {
System.out.println("Inside of if");
}
System.out.println(x); //"1"
现在,当运行该if语句时,即使左操作数为false,表达式(1=+x)也将被执行。因此,为x打印出来的值将为1,因为它是递增的。
这也适用于逻辑OR(X)、按位OR(X)和布尔OR(X)希望这可以消除一些混淆。