Toán tử hoặc đoạn giới thiệu ngắn khi toán hạng đầu tiên là đúng. Vì vậy,
String foo = null;
if (true || foo.equals("")) {
// ...
}
không ném NullPointerException
.
Khi @prajeesh đúng chỉ ra trong các nhận xét, trên đường dây ngắn mạch được sử dụng trong mã thực là để ngăn chặn một NullPointerException
bất cứ khi nào bạn đang xử lý một API có thể trả về null. Vì vậy, ví dụ, nếu có một phương pháp readStringFromConsole
trả về một trong hai chuỗi hiện có hoặc null nếu người dùng không gõ bất cứ điều gì, chúng ta có thể viết
String username = readStringFromConsole();
while (username == null || username.length() == 0) {
// No NullPointerException on the while clause because the length() call
// will only be made if username is not null
System.out.println("Please enter a non-blank name");
username = readStringFromConsole();
}
// Now do something useful with username, which is non-null and of nonzero length
Là một mặt lưu ý, một API trả về đầu vào người sử dụng nên trả lại chuỗi rỗng bất cứ khi nào người dùng không nhập bất kỳ thứ gì và không được trả về null. Trả về null là một cách để nói "không có gì có sẵn", trong khi trả về chuỗi rỗng là một cách để nói "người dùng không gõ bất cứ điều gì" và vì vậy được ưa thích.
Nguồn
2012-04-15 18:49:17
Ngắn mạch sẽ xảy ra khi kết quả của toán hạng đầu tiên có thể xác định kết quả của phép toán logic. Đối với '&&' cái đầu tiên trở thành 'false' sẽ làm cho kết quả' false' chắc chắn và cho '||' cái đầu tiên trở thành true sẽ làm cho kết quả là 'true' chắc chắn. Vì vậy, toán hạng đầu tiên là 'true' sẽ ngắn mạch luôn luôn cho toán tử' || '. –
Tại sao nó đơn giản hơn với ||? Nó chính xác đơn giản như với &&. Việc tính toán các biểu thức được dừng lại khi giá trị của toàn bộ điều kiện được biết. Biểu thức được đánh giá từ trái sang phải. –
@ MichaelSchmeißer: xin lỗi không biết làm thế nào tôi bỏ lỡ nó đơn giản. – Vivek