Я думаю, що моя відповідь може бути зрозумілішою:
Існує дві відмінності між &та &&.
Якщо вони використовуються як логічні І
&і &&може бути логічним 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