Я думаю, что мой ответ может быть более понятным:
Есть два различия между &
и &&
.
Если они используют как логическое И
&
и &&
может быть логичным AND
, когда результат выражения &
or или &&
left и right все true, весь результат операции может быть true.
когда &
и &&
как логично AND
, есть разница:
при использовании в &&
качестве логического AND
, если результат левого выражения равен false, правое выражение не будет выполнено.
Возьмите пример:
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
оператор, &&
не может.
Битовый оператор AND «&» выдает 1 в том и только в том случае, если оба бита в его операндах равны 1. Однако, если оба бита равны 0 или оба бита различны, этот оператор выдает 0. Чтобы быть более точным в битовом выражении AND Оператор «&» возвращает 1, если любой из двух битов равен 1, и возвращает 0, если любой из битов равен 0.
Со страницы вики:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml