Eu acho que minha resposta pode ser mais compreensível:
Existem duas diferenças entre &
e &&
.
Se eles usam como AND lógico
&
e &&
pode ser lógico AND
, quando o &
ou &&
para a esquerda e resultar expressão certa tudo é verdadeiro, todo o resultado da operação pode ser verdade.
quando &
e &&
como lógico AND
, há uma diferença:
quando usado &&
como lógico AND
, se o resultado da expressão esquerda for falso, a expressão correta não será executada.
Veja o exemplo:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
Se estiver usando &
:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Outro outro exemplo:
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
}
& pode ser usado como operador de bit
&
pode ser usado como AND
operador Bitwise , &&
não pode.
O operador AND "&" bit a bit produz 1 se e somente se os dois bits de seus operandos forem 1. No entanto, se os dois bits forem 0 ou os dois bits forem diferentes, esse operador produzirá 0. Para ser mais preciso, o bit a bit O operador AND "&" retorna 1 se qualquer um dos dois bits for 1 e retorna 0 se qualquer um dos bits for 0.
Na página wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml