&
&運算符有兩種用法:(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異常。
總結
為什么平時大家都使用的是&&而不是&,我認為是&&出錯的可能性更小,而,&容易出錯。