Saat menguji persamaan String
di Jawa, saya selalu menggunakan equals()
karena bagi saya ini sepertinya metode paling alami untuk itu. Bagaimanapun, namanya sudah mengatakan apa yang akan dilakukannya. Namun, seorang kolega saya baru-baru ini memberi tahu saya telah diajari untuk menggunakan, compareTo() == 0
bukan equals()
. Ini terasa tidak wajar (seperti compareTo()
yang dimaksudkan untuk memberikan tatanan dan tidak membandingkan kesetaraan) dan bahkan agak berbahaya (karena compareTo() == 0
tidak selalu berarti kesetaraan dalam semua kasus, meskipun saya tahu itu untuk String
) bagi saya.
Dia tidak tahu mengapa dia diajari untuk menggunakan compareTo()
daripada equals()
untuk String
, dan saya juga tidak dapat menemukan alasan mengapa. Apakah ini benar-benar masalah selera pribadi, atau adakah alasan nyata untuk kedua metode tersebut?
compareTo() == 0
tidak selalu berarti kesetaraan dalam semua kasus". Ini sangat benar! Persis seperti inilah arti frasa "konsisten dengan sama" dalam spesifikasi Java API, misalnya dalam spesifikasi kelas yang sebanding . Misalnya, metode perbandingan String konsisten dengan sama, tetapi metode perbandingan BigDecimal tidak konsisten dengan sama.
.equalsIgnoreCase()
adalah perbandingan tercepat jika memang sesuai, jika.equals()
tidak itulah yang Anda inginkan.