以前在C的学习中,曾认为&和&&的区别在于:前者是位运算符,后者是逻辑运算符。
在Java中,这个问题不能这么简单的来看。
&和&&都是可以作为逻辑运算符的,其逻辑运算规则是相同的。
a:true b:true a&b:true a&&b:true
a:true b:false a&b:false a&&b:false
a:false b:true a&b:false a&&b:false
a:false b:false a&b:false a&&b:false
但&作为逻辑运算符时,即使第一个操作符是false,那么它仍然会计算第二个操作符。&&短路与,如果第一个操作符为false,那么它不会再去计算第二个操作符。
eg.
System.out.println(false & (1/0 == 0)); 抛出异常
System.out.println(false
&& (1/0 == 0)); 打印出false
|与||的区别是一样的。