Câu trả lời được true|| true
không được bảo hiểm.
Điều này là do một khi JVM đã tìm thấy điều kiện đầu tiên là đúng, sau đó nó sẽ không chạy điều kiện thứ hai (nó được tối ưu hóa) có nghĩa là phần mã không bao giờ chạy.
Như Maroun cho biết, 3 trong số 4 chi nhánh sẽ cho phép điều kiện vượt qua. Nếu bạn vẫn lo lắng về phạm vi mã, bạn có thể cấu trúc lại điều kiện là &&
thay vì ||
.
(x || y)
cũng giống như (!(!x && !y))
và điều này sẽ cho phép bạn kiểm tra tất cả các điều kiện vì hiện tại chỉ có ba nhánh.
Hình thức ban đầu của điều kiện thường được nhìn thấy trong báo cáo bảo vệ:
if (obj == null || obj.hasError())
{
throw new RuntimeException();
}
này sẽ không bao giờ cho phép bạn kiểm tra xem obj
là null
VÀ có lỗi bởi vì nó sẽ ném một ngoại lệ Null Pointer.
Nếu mã số bảo hiểm là rất quan trọng, sau đó chỉ dùng biểu mẫu này:
if (!(obj != null && !obj.hasError()))
{
throw new RuntimeException();
}
Nguồn
2013-11-12 04:05:43
Câu hỏi đặt ra là, làm cách nào để biết những chi nhánh nào trong số này không được theo dõi? Tôi biết chắc chắn nó không phải là trường hợp giả/sai, vì trường hợp "khác" được thực hiện trong một số trường hợp. – tor
Không phải là sự thật || trường hợp thực sự không được bảo hiểm? – Jason
Tôi vừa vấp phải câu hỏi này - đã phải quay lại để nhớ các bảng chân lý logic kỹ thuật số cũ và các điều kiện "không quan tâm". –