Я думаю, что мой ответ может быть более понятным:
Есть два различия между &
и &&
.
Если они используют как логическое И
&
и &&
могут быть логическими AND
, когда результат левого и правого выражений &
или &&
все равен true, весь результат операции может быть истинным.
когда &
и &&
в качестве логического AND
, есть разница:
при использовании &&
в качестве логического AND
, если результатом левого выражения является ложь, правое выражение не будетвыполнить.
Взять пример:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
При использовании &
:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Еще один пример:
int x = 0;
int y = 2;
if(x==0 & ++y>2){
System.out.print(“y=”+y); // print is: y=3
}
int x = 0;
int y = 2;
if(x==0 && ++y>2){
System.out.print(“y=”+y); // print is: y=2
}
& может использоваться как битовый оператор
&
может использоваться как битовый оператор AND
, &&
не может.
Оператор побитового И "&" выдает 1 в том и только в том случае, если оба бита в его операндах равны 1. Однако, если оба бита равны 0 или оба бита различны, этот оператор prвыводит 0. Чтобы быть более точным, побитовое И оператор «&» возвращает 1, если любой из двух битов равен 1, и возвращает 0, если любой из битов равен 0.
Со страницы вики:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml