&<-验证两个操作数&如果第一个操作数计算为false,则停止计算,因为结果将为false。(x != 0) & (1/x > 1) <-- this means evaluate (x != 0)然后评估(1/x > 1)那就去做。问题是,对于x=0,这将引发异常。(x != 0) && (1/x > 1) <-- this means evaluate (x != 0)只有当这是真的,然后评估(1/x > 1)因此,如果有x=0,那么这是完全安全的,如果(x!=0)计算结果为false,则不会抛出任何异常。(1/x > 1).编辑:exprA | exprB <-- this means evaluate exprA然后评估exprB然后做|.exprA || exprB <-- this means evaluate exprA如果这是false然后评估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