&:按位与运算(长路与)
&&:逻辑与运算(短路与)
无论 长路与 还是 短路与
两边的运算单元都是 布尔值
都为真时,才为真
任意为假,就为假
区别:
长路与 两侧都会被运算,无论左边结果如何,右边都会继续运算
短路与 只要左边是false,右边就不会进行运算了
大多数时候用&&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null && !username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。