Tôi đã viết một đoạn mã Java đang chạy trong một vòng lặp vô hạn.
Dưới đây là mã:
public class TestProgram {
public static void main(String[] args){
Integer i = new Integer(0);
Integer j = new Integer(0);
while(i<=j && j<=i && i!=j){
System.out.println(i);
}
}
}
Trong đoạn mã trên, trong khi nhìn thấy điều kiện trong whilevòng lặp, thoạt đầu có vẻ như chương trình đó sẽ không đi vào bên trong whilevòng lặp. Nhưng thực ra nó là một vòng lặp vô hạn và tiếp tục in giá trị.
Chuyện gì đang xảy ra ở đây?
ihoặc j, khi nào bạn mong đợi vòng lặp kết thúc?
i<=jvà j<=ibạn có thể kết luận, điều i == jđó mâu thuẫn với thuật ngữ trước. Do đó, toàn bộ biểu thức được đánh giá là false và while sẽ không được nhập. Điểm mấu chốt là nhận dạng đối tượng ở đây!
i<=j && j<=i && i!=jđiều kiện này luôn luôn đánh giá là đúng. Chỉ cần lấy một mảnh giấy và đánh giá bạn sẽ bắt nó :)