Я думаю, що моя відповідь може бути зрозумілішою:
Існує дві відмінності між &
та &&
.
Якщо вони використовуються як логічні І
&
і &&
може бути логічним AND
, коли &
або &&
ліве і праве вираз результат все вірно, весь результат операції може бути правдою.
коли &
і &&
як логічно 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
оператор, &&
не може.
Оператор побітового AND "&" виробляє 1, якщо і тільки якщо обидва біта в його операндах дорівнюють 1. Однак, якщо обидва біта дорівнюють 0 або обидва біта відрізняються, цей оператор видає 0. Щоб бути більш точним розрядним способом І оператор "&" повертає 1, якщо будь-який з двох бітів дорівнює 1, і він повертає 0, якщо будь-який з бітів дорівнює 0.
На сторінці вікі:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml