由于&和&&在面试中被问到的概率比较大,特单独做一个总结。
不了解逻辑运算符的可以参考博客:https://blog.csdn.net/duan196_118/article/details/104128856
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
同理 |(或)与||(短路或)的异同:
相同点:
二者都表示或操作,当运算符两边的操作数任何一边的值为true时,其结果为true,当两边的值都为false时,其结果才为false。
不同点:同与操作类似,
|| 表示短路或,当运算符左边的值为true时,右边的表达式不会进行运算,最后结果为true。
| 当左边的值为true时,右边的表达式还是会被执行,最终结果仍为true。
有没有明白其中的区别呢?如有不同见解,欢迎留言指正。。。