&,|是位运算符:
a&b是把a和b都转换成二进制数然后再进行按位与的运算;
a|b是把a和b都转换成二进制数然后再进行按位或的运算;
&&,||是逻辑运算符,短路运算
&&:当左表达式为false时,整体不可能为true,右表达式将不再运算;
||: 当左表达式为true时,整体为true,右表达式将不再运算;
也就是说在有些情况下左表达式会将右表达式“短路”。
这种方式可以避免一些错误的发生
System.out.println(1!=1&&1/0==1);
System.out.println(1==1||1/0==1
上面的语句在执行时没有报错,说明后面的除0语句没有执行。
而& , | 在得到结果之前必须计算左右表达式的值。
总结:
1.& , | 为位运算符,在得到结果之前左右表达式都要进行计算;
2.&& , ||为逻辑运算符,可以减少计算量,可以避免错误的发生
2.1&&:当左表达式为false时,整体不可能为true,右表达式将不再运算;
2.2||: 当左表达式为true时,整体为true,右表达式将不再运算。
简而言之 |与||的区别是 |左右两部分不管为true还是false都要计算 而|| 在左部分为false时 有部分就不会进行判断