Tôi nghĩ rằng câu trả lời của tôi có thể dễ hiểu hơn:
Có hai sự khác biệt giữa &và &&.
Nếu họ sử dụng như logic VÀ
&và &&có thể logic AND, khi tất cả các kết quả biểu thức &hoặc &&trái và phải đều đúng, toàn bộ kết quả hoạt động có thể đúng.
khi &và &&theo logic AND, có một sự khác biệt:
khi sử dụng &&làm logic AND, nếu kết quả biểu thức bên trái là sai, biểu thức bên phải sẽ không thực thi.
Lấy ví dụ:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
Nếu sử dụng &:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Một ví dụ khác:
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
}
& có thể được sử dụng như toán tử bit
&có thể được sử dụng như ANDtoán tử Bitwise , &&không thể.
Toán tử bitwise AND "&" tạo ra 1 khi và chỉ khi cả hai bit trong toán hạng của nó là 1. Tuy nhiên, nếu cả hai bit bằng 0 hoặc cả hai bit đều khác nhau thì toán tử này tạo ra 0. Để chính xác hơn từng bit Toán tử AND "&" trả về 1 nếu bất kỳ một trong hai bit là 1 và nó trả về 0 nếu bất kỳ bit nào là 0.
Từ trang wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml