Khi kiểm tra tính bình đẳng của String
trong Java, tôi luôn sử dụng equals()
vì đối với tôi, đây dường như là phương pháp tự nhiên nhất cho nó. Rốt cuộc, tên của nó đã nói lên những gì nó dự định làm. Tuy nhiên, một đồng nghiệp của tôi gần đây nói với tôi đã được dạy để sử dụng compareTo() == 0
thay thế equals()
. Điều này cảm thấy không tự nhiên (vì compareTo()
nó được sử dụng để cung cấp một trật tự chứ không phải so sánh để bình đẳng) và thậm chí hơi nguy hiểm (vì compareTo() == 0
không nhất thiết bao hàm sự bình đẳng trong mọi trường hợp, mặc dù tôi biết điều đó String
là đúng) đối với tôi.
Anh ấy không biết tại sao anh ấy được dạy sử dụng compareTo()
thay vì equals()
for String
, và tôi cũng không thể tìm ra lý do tại sao. Đây thực sự là một vấn đề của sở thích cá nhân, hay có bất kỳ lý do thực sự nào cho một trong hai phương pháp?
compareTo() == 0
không nhất thiết ngụ ý sự bình đẳng trong mọi trường hợp". Điều này hoàn toàn chính xác! Đây chính xác là những gì cụm từ "nhất quán với bằng" có nghĩa là trong các đặc tả API của Java, ví dụ như trong đặc tả lớp So sánh . Ví dụ: phương pháp so sánh của String phù hợp với bằng, nhưng phương pháp so sánh của BigDecimal không phù hợp với bằng.
.equalsIgnoreCase()
là so sánh nhanh nhất nếu nó phù hợp, nếu không thì đó.equals()
là điều bạn muốn.