ฉันคิดว่าคำตอบของฉันสามารถเข้าใจได้มากขึ้น:
มีสองความแตกต่างระหว่างมี และ&
&&
หากพวกเขาใช้เป็นตรรกะและ
&
และ&&
อาจเป็นตรรกะ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
ตัวดำเนินการ Bitwise &&
ไม่ได้
ตัวดำเนินการ bitwise AND "&" จะสร้าง 1 ถ้าหากบิตทั้งสองในตัวถูกดำเนินการเป็น 1 อย่างไรก็ตามถ้าบิตทั้งสองเป็น 0 หรือทั้งสองของบิตนั้นแตกต่างกันตัวดำเนินการนี้จะสร้าง 0 ให้แม่นยำขึ้น AND "&" ตัวดำเนินการส่งคืน 1 ถ้าหนึ่งในสองบิตใด ๆ เป็น 1 และจะส่งกลับ 0 ถ้าบิตใด ๆ เป็น 0
จากหน้า wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml