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ư AND
toá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