&
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&
&&运算符是短路与运算。如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。
很多时候我们可能都需要用&&而不是&,
例1
int i = 0;
if(i == 3 && ++i > 0 ){
}
System.out.println("i = " + i);
int j = 0;
if(j == 3 & ++j > 0 ){
}
System.out.println("j = " + j);
输出:
i = 0
j = 1
这是因为&后面的语句执行了,而&&后面的语句没有执行
例2
来源:https://www.cnblogs.com/hongten/p/hongten_java_yu.html
在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。
总结
为什么平时大家都使用的是&&而不是&,我认为是&&出错的可能性更小,而,&容易出错。