Java มีประเภทง่าย ๆ ที่แสดงค่าตรรกะที่เรียกว่าบูลีน ค่าของมันสามารถเป็นหนึ่งในสองค่าเท่านั้น: จริงหรือเท็จ มันเป็นทั้งหมดเช่นโปรแกรมต่อไปนี้แสดงให้เห็นถึงการใช้ประเภทบูลีน:
// สาธิตค่าบูลีน คลาส BoolTest { public static void main(String args[]) { boolean b; b = false; System.out.println("b is " + b); ("b คือ " + b); // ค่าบูลีนสามารถควบคุมคำสั่ง if(b) System.out.println("สิ่งนี้ถูกดำเนินการ"); System.out.println("สิ่งนี้ไม่ได้ถูกดำเนินการ"); // ผลลัพธ์ของตัวดำเนินการเชิงสัมพันธ์คือค่าบูลีน System.out.println("10 > 9 คือ " + (10 > 9));
ผลลัพธ์ของการรันโปรแกรมนี้มีดังนี้:
b เป็นเท็จ b เป็นจริง สิ่งนี้ถูกดำเนินการ 10 > 9 เป็นจริง
มี 3 สิ่งที่น่าสนใจที่ควรทราบเกี่ยวกับโปรแกรมนี้ ขั้นแรก คุณคงทราบแล้วว่าเมื่อคุณใช้เมธอด println () เพื่อส่งออกค่าบูลีน ระบบจะแสดง "true" หรือ "false" ประการที่สอง ค่าของตัวแปรบูลีนนั้นเพียงพอที่จะควบคุมคำสั่ง if ไม่จำเป็นต้องเขียน if คำสั่งเช่นนี้:
ถ้า(ข == จริง) ...
ประการที่สาม ผลลัพธ์ของตัวดำเนินการเชิงสัมพันธ์ (เช่น <) คือค่าบูลีน นี่คือสาเหตุที่นิพจน์ 10>9 แสดงเป็น "จริง" นอกจากนี้ วงเล็บเพิ่มเติมจะถูกเพิ่มไว้ทั้งสองด้านของนิพจน์ 10>9 เนื่องจากเครื่องหมายบวก "+" มีลำดับความสำคัญสูงกว่าตัวดำเนินการ ">"
ความแตกต่างระหว่างการดำเนินการเชิงตรรกะและการดำเนินการระดับบิตในประเภท JAVA Boolean
ในแง่ของผลลัพธ์ ผลลัพธ์ของการดำเนินการทั้งสองจะเหมือนกัน แต่การดำเนินการเชิงตรรกะจะมีปรากฏการณ์ "ลัดวงจร" ในขณะที่การดำเนินการระดับบิตไม่มี และการดำเนินการระดับบิตจะมีฟังก์ชัน "XOR" มากกว่าการดำเนินการเชิงตรรกะ
ปรากฏการณ์ไฟฟ้าลัดวงจร
คลาส br { บูลีนคงที่ f1() { กลับเท็จ; } บูลีนคงที่ f2() { กลับจริง; } บูลีนคงที่ f3() { กลับจริง; ();
ผลลัพธ์เป็นเท็จ เมื่อ f1() เป็นเท็จ จะทราบผลลัพธ์ของการดำเนินการ && ที่ตามมาโดยไม่ต้องดำเนินการดังกล่าว JAVA จะ "ลัดวงจร" การดำเนินการครั้งต่อไปและปรับปรุงประสิทธิภาพ
บูลีน f_2 = br.f2()||br.f1()||br.f3();
ผลลัพธ์จะเป็น true ในทำนองเดียวกัน f2() จะเป็น true และไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม
ดูเหมือนสะดวกและมีประสิทธิภาพมาก แต่ก็ยังมีข้อบกพร่องอยู่
บูลีน f_3 = br.f2()||br.f3()&&br.f1();
ผลลัพธ์จะเป็นจริง ซึ่งควรจะเป็นเท็จ นี่เป็นข้อผิดพลาดที่เกิดจาก "ไฟฟ้าลัดวงจร" หากคุณต้องการคำตอบที่ถูกต้อง คุณต้องเพิ่มวงเล็บ:
f_3=( br.f2()||br.f3())&&br.f1();
การดำเนินการระดับ Bitwise มีฟังก์ชัน XOR ที่ตรรกะไม่มี:
บูลีน f = จริง^จริง;
ผลลัพธ์ f = เท็จ;