1.&与&&的区别?
共同点:
都为逻辑与(and),java中逻辑运算符与离散数学等的逻辑运算符是类似的,两边表达式都为真(true)则为真,否则为假(false);
不同点:
&&的短路特性,短路特性是什么呢?用&&连接两个表达式时,当前一个表达式为假(false)则跳过对另一个表达式的计算。引用较为典型的例子:
if(str!=null&&str!=""),运行时表达式一结果为假则不进行表达式二的判断,那么,我们在异常上因为两者的这一不同点有了不同:
&&因为表达式一判断str为空(null)时,表达式不执行不会报空指针异常,而if(str!=null&str!="")两个表达式都会执行,所以会出现空指针异常。
此外,由于短路特性,表达式二为对变量的值运算时,&与&&也会有表达式一不成立表达式二变量值是否发生改变的问题。
&可作为位运算符,当&操作符两边的表达式不是boolean时, &表示按位与运算。