Phép trừ "mẹo" để so sánh hai giá trị số bị hỏng !!!
int a = -2000000000;
int b = 2000000000;
System.out.println(a - b);
Đây, a < b
nhưng a - b
là tích cực.
KHÔNG sử dụng thành ngữ này. Nó không hoạt động.
Hơn nữa, ngay cả khi nó hoạt động , nó sẽ KHÔNG cung cấp bất kỳ cải tiến đáng kể nào về hiệu suất và trên thực tế, có thể tốn kém khả năng đọc.
Xem thêm
- Câu đố Java Puzzlers Câu đố 65: Một Saga kỳ lạ của sự sắp xếp đáng ngờ
Câu đố này có một số bài học. Cụ thể nhất là: Không sử dụng bộ so sánh dựa trên phép trừ trừ khi bạn chắc chắn rằng sự khác biệt giữa các giá trị sẽ không bao giờ lớn hơn Integer.MAX_VALUE
. Nói chung, hãy cẩn thận với int
tràn. Một bài học khác là bạn nên tránh mã "thông minh". Cố gắng viết mã rõ ràng, chính xác và không tối ưu hóa nó trừ khi chứng minh được là cần thiết.