Judul pada dasarnya mengatakan itu semua. Saya biasanya menguji ini bersama a string == null
, jadi saya tidak benar-benar khawatir tentang tes nol-aman. Yang mana yang harus saya gunakan?
String s = /* whatever */;
...
if (s == null || "".equals(s))
{
// handle some edge case here
}
atau
if (s == null || s.isEmpty())
{
// handle some edge case here
}
Pada catatan itu - isEmpty()
bahkan tidak melakukan apa pun selain return this.equals("");
atau return this.length() == 0;
?
isEmpty()
itu hanya Java 6+.Jawaban:
Manfaat utama
"".equals(s)
adalah Anda tidak perlu cek nol (equals
akan memeriksa argumennya dan kembalifalse
jika itu nol), yang tampaknya tidak Anda pedulikan. Jika Anda tidak khawatirs
menjadi nol (atau memeriksanya), saya pasti akan menggunakans.isEmpty()
; itu menunjukkan dengan tepat apa yang Anda periksa, Anda pedulis
kosong atau tidak , tidak sama dengan string kosongsumber
getValue()
dikembalikan nol, Anda akan mendapatkan NullPointerException ketikatoString()
dipanggils
nol, Anda tidak dapat memanggil metode di dalamnya - itu nol.""
tidak akan pernah menjadi nol, sehingga Anda dapat memanggil metode di dalamnya dengan aman, danequals()
dapat menangani kasus di mana argumennya nolisEmpty()
memeriksa panjang internal array pribadi sementaraequals(Object anObject)
melakukan lebih banyak lagi (misalnya memeriksainstanceof
). Dari segi perfromance,isEmpty()
umumnya lebih cepat.String.equals("")
sebenarnya sedikit lebih lambat dari sekedarisEmpty()
panggilan. Strings menyimpan variabel count yang diinisialisasi dalam konstruktor, karena String tidak dapat diubah.isEmpty()
membandingkan variabel jumlah ke 0, sedangkan yang sama akan memeriksa jenis, panjang string, dan kemudian beralih pada string untuk perbandingan jika ukurannya cocok.Jadi untuk menjawab pertanyaan Anda,
isEmpty()
sebenarnya akan melakukan jauh lebih sedikit! dan itu hal yang baik.sumber
Satu hal yang mungkin ingin Anda pertimbangkan selain masalah lain yang disebutkan adalah yang
isEmpty()
diperkenalkan pada 1.6, jadi jika Anda menggunakannya Anda tidak akan dapat menjalankan kode di Java 1.5 atau di bawah.sumber
Anda dapat menggunakan apache commons StringUtils isEmpty () atau isNotEmpty ().
sumber
Itu tidak masalah.
"".equals(str)
lebih jelas menurut saya.isEmpty()
pengembaliancount == 0
;sumber
str.isEmpty()
jauh lebih jelas daripada"".equals(str)
. Bunyinya seperti apa yang Anda periksa. Soal pendapat, saya kira.Saya menulis kelas penguji yang dapat menguji kinerja:
Saya menemukan bahwa menggunakan .isEmpty () membutuhkan waktu separuh waktu .equals ("").
sumber