Java cung cấp hai toán tử Boolean thú vị không có trong hầu hết các ngôn ngữ máy tính khác. Các phiên bản thứ cấp của AND và OR được gọi là các toán tử logic ngắn mạch . Như bạn có thể thấy từ bảng trước, toán tử OR cho kết quả là true khi A đúng, bất kể B là gì.
Tương tự, toán tử AND cho kết quả false khi A sai, bất kể B là gì. Nếu bạn sử dụng các dạng ||
và &&
thay vì dạng |
và &
của các toán tử này, Java sẽ không bận tâm đến việc đánh giá toán hạng bên phải một mình. Điều này rất hữu ích khi toán hạng bên phải phụ thuộc vào toán hạng bên trái là true hoặc false để hoạt động đúng.
Ví dụ: đoạn mã sau đây cho thấy cách bạn có thể tận dụng đánh giá lôgic ngắn mạch để đảm bảo rằng phép toán phân chia sẽ hợp lệ trước khi đánh giá nó:
if ( denom != 0 && num / denom >10)
Vì dạng ngắn mạch của AND ( &&
) được sử dụng, không có nguy cơ gây ra ngoại lệ thời gian chạy từ phép chia cho 0. Nếu dòng mã này được viết bằng một &
phiên bản AND, thì cả hai bên sẽ phải được đánh giá, gây ra ngoại lệ thời gian chạy khi denom
bằng 0.
Thông lệ tiêu chuẩn là sử dụng các dạng ngắn mạch của AND và OR trong các trường hợp liên quan đến logic Boolean, để lại các phiên bản ký tự đơn dành riêng cho các phép toán bit. Tuy nhiên, có những trường hợp ngoại lệ cho quy tắc này. Ví dụ, hãy xem xét câu lệnh sau:
if ( c==1 & e++ < 100 ) d = 100;
Ở đây, việc sử dụng một đơn vị &
đảm bảo rằng phép toán tăng dần sẽ được áp dụng cho e
việc c
có bằng 1 hay không.