开始学Java,发现了点新东西。。。
Java中的与逻辑运算符是分类别的,有 短路与(&&)和 不短路与(&) 之分, 先说说 短路与 ,我们知道与运算的逻辑规则是与运算的两位操作数必须都是true的情况下才返回true——即: x && y 的 值当且仅当a和b都为true时才返回true。
那么当x为false时,无论y是true还是false整个与运算表达式(x && y)都返回false。那么y的值就没有计算的必要了。这就是短路与。看下面这个例子:
2<1返回false,所以f++<3就没有执行,下面的结果也符合情况f为0.整个表达式a的值也为false。那个Dead code也显示了(f++<3)那段代码是没有意义的。这就是短路与。
那么不短路(&)与就好理解了,那就是无论前一个操作数x是true还是false,表达式都会计算y的值然后的出总表达式的结果。
看下图:
(2<1)的值是false,但f的结果变成1了,所以(f++<3)还是执行了的。这就是不短路与。然后重点来了,就是位运算与怎么处理呢???没错,这就是Java中 & 的另一个功能, 运算符 & 除了能表示逻辑与中的不短路与, 它还能表示位运算与,至于什么是位运算,就是把两个数按二进制表示对应的每一位都逻辑与(1表示true,0表示false),即1和1得1,1和0得0,0和0得0. 如下图:
因为3的二进制表示为11,2的二进制表示为10.所以按为与后就得10,即2.故结果为2.