Saya ingin membandingkan dua string untuk kesetaraan di Jawa, ketika salah satu atau keduanya bisa null
, jadi saya tidak bisa begitu saja menelepon .equals()
. Apakah cara terbaiknya?
boolean compare(String str1, String str2) {
...
}
Edit:
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
Jawaban:
Inilah yang digunakan kode internal Java (pada
compare
metode lain ):sumber
<0
,==0
atau>0
untuk menunjukkan mana yang lebih rendah / parutan dari yang lainObjects.equals(Object, Object)
sebagaimana Mark Rotteveel telah tunjukkan dalam jawabannya (tolong beri dukungan)Karena Java 7 Anda dapat menggunakan metode statis
java.util.Objects.equals(Object, Object)
untuk melakukan pemeriksaan yang sama pada dua objek tanpa peduli keberadaannyanull
.Jika kedua objek
null
itu akan kembalitrue
, jika satunull
dan yang lain bukan akan kembalifalse
. Kalau tidak, itu akan mengembalikan hasil memanggilequals
objek pertama dengan yang kedua sebagai argumen.sumber
Object.equals(Object)
tidak ada pemeriksaan jenis waktu kompilasi. TheObjects.equals(Object, Object)
bekerja sangat banyak yang sama seperti normalequals
, dan re inferensi / pemeriksaan oleh IDE, aturan-aturan yang heuristik yang juga didukung untukObjects.equals(Object, Object)
(misalnya IntelliJ IDEA 2016,2 memiliki cek yang sama untuk kedua equals normal dan satu dari Objects).Untuk kasus-kasus ini akan lebih baik menggunakan sama dengan Apache Commons StringUtils # , itu sudah menangani string null. Contoh kode:
Jika Anda tidak ingin menambahkan perpustakaan, hanya menyalin kode sumber dari
StringUtils#equals
metode dan menerapkannya ketika Anda membutuhkannya.sumber
Bagi mereka yang menggunakan Android, yang tidak dapat menggunakan Objects.equals API 19 (str1, str2), ada ini:
Ini nol aman. Jarang harus menggunakan metode string.equals () yang lebih mahal karena string identik pada android hampir selalu benar dibandingkan dengan operan "==" berkat String Pooling Android , dan pengecekan panjang adalah cara cepat untuk menyaring sebagian besar ketidakcocokan.
Kode sumber:
sumber
Sejak versi 3.5 Apache Commons StringUtils memiliki metode berikut:
Ini memberikan perbandingan String aman nol.
sumber
Menggunakan Java 8:
sumber
Bandingkan dua string menggunakan equals (-, -) dan metode equalsIgnoreCase (-, -) dari kelas Apache Commons StringUtils.
StringUtils.equals (-, -) :
StringUtils.equalsIgnoreCase (-, -) :
sumber
Anda bisa menggunakan
java.util.Objects
sebagai berikut.sumber
apakah ini yang kamu inginkan?
sumber
false
jika kedua Stringsnull
mungkin bukan hasil yang diinginkan.sumber
sumber
OK, jadi apa artinya "solusi terbaik"?
Jika yang Anda maksud paling mudah dibaca, maka semua solusi yang mungkin cukup banyak setara untuk seorang programmer Java yang berpengalaman. Tapi IMO yang paling mudah dibaca adalah ini
Dengan kata lain, sembunyikan implementasi di dalam metode sederhana yang (idealnya) dapat digarisbawahi.
(Anda juga bisa "out-source" ke perpustakaan utilitas pihak ke-3 ... jika Anda sudah menggunakannya dalam basis kode Anda.)
Jika yang Anda maksud adalah sebagian besar pemain, maka:
null
argumen,sumber