2009-05-08 30 views

Trả lời

28

equalsIgnoreCasethể thể nhanh hơn rất nhiều. Ví dụ, hãy xem xét hai chuỗi bắt đầu với cùng một 10.000 ký tự - nhưng một trong số chúng có ký tự thừa ở cuối. equalsIgnoreCase có thể trở lại ngay lập tức; compareToIgnoreCase phải lặp lại đến cuối chuỗi để thấy sự khác biệt.

Nhưng nói chung tôi sẽ đi với bất kỳ điều gì thể hiện ý định của bạn tốt hơn. Điều này cũng phù hợp với hiệu suất: giả sử tôi đúng khi nói rằng equalsIgnoreCase ít nhất là nhanh như compareToIgnoreCase, có nghĩa là bạn nên sử dụng nơi bạn có thể - nếu bạn cần đặt hàng thực tế, bạn vẫn phải sử dụng compareToIgnoreCase.

+0

@Downvoter: Chăm sóc để đưa ra lý do? –

+0

equalsIgnoreCase() có một số khác biệt quan trọng đối với compareToIgnoreCase(). Đối với 1, nó kiểm tra cho == bình đẳng đầu tiên trước khi thực sự nhìn thấy nếu tất cả các ký tự đều giống nhau. CompareTo sẽ luôn thực hiện so sánh đầy đủ các ký tự, nhưng nó sẽ không xem xét địa phương. Vì vậy, bạn thực sự cần phải biết so sánh để sử dụng và sau đó điểm chuẩn nó. –

10

nếu bạn lo lắng về màn trình diễn ... đo lường nó

+1

Quá dễ dàng! Phải có cách để lãng phí thời gian của nhiều người hơn! – Bombe

+0

thực sự, câu trả lời rất hay phải không? – dfa

+4

Nó thực sự rất dễ dàng để đi đến kết luận sai bằng cách sử dụng đo trong trường hợp này, vì kết quả rất nhiều phụ thuộc vào chính xác những gì bạn đo. Thật tốt khi thu được một số hiểu biết đầu tiên - xem câu trả lời của Jon Skeet cho một ví dụ điển hình. –

4

Nhìn vào nguồn cho java.lang.String

public boolean equalsIgnoreCase(String anotherString) { 
    return (this == anotherString) ? true : 
      (anotherString != null) && (anotherString.count == count) && 
     regionMatches(true, 0, anotherString, 0, count); 
} 

Vì vậy, trước khi nó nhìn vào chuỗi ký tự thực tế của nhân vật (mà cũng xảy ra trong một thời trang tương tự cho compareToIgnoreCase), equalsIgnoreCase cũng kiểm tra để tham khảo bản sắc và độ dài ký tự, có thể nhanh hơn rất nhiều.

+0

Hoặc nó có thể là một sự lãng phí thời gian khi hầu hết các chuỗi là khác nhau :) –

+0

chắc chắn, đó là một sự cân bằng. Nhưng hai so sánh này rất nhanh, vì vậy bạn sẽ không mất nhiều. Và so sánh chiều dài nên khá hiệu quả (phát hiện rất nhiều chuỗi khác nhau rất nhanh). – Thilo

Các vấn đề liên quan