Rumah > Soal Jawab > teks badan
if(id!=null&&id!="")
代码中经常这样写,空字符串跟null 都不用equals吗?
高洛峰2017-04-17 17:53:37
Pertama sekali, cara penulisan anda id!=""
adalah salah. Anda harus menulisnya sebagai !id.equals("")
.
Kedua, anda mesti faham maksud ==
dan equals
==
bermakna kedua-dua objek adalah rujukan kepada objek yang sama ==null
bermakna objek ini bukan rujukan kepada mana-mana objek contoh dan objek itu kosong.
equals
ialah kaedah dalam kelas String, menunjukkan bahawa kandungan dua rentetan adalah sama.
怪我咯2017-04-17 17:53:37
Ia telah ditulis seperti ini sepanjang masa. Saya tertanya-tanya mengapa?
怪我咯2017-04-17 17:53:37
Rentetan kosong sebenarnya memerlukan sama, jika tidak ralat akan berlaku. null boleh digunakan!=
天蓬老师2017-04-17 17:53:37
Kod berikut, hasilnya palsu
String d = new String("");
System.out.println(""==d);
Jadi equals mesti digunakan untuk menentukan rentetan kosong, seperti
public static boolean isEmpty(String str) {
return (str == null || "".equals(str));
}
Atau gunakan panjang untuk menentukan dan mengembangkan ke mana-mana CharSequence, seperti
public static boolean isEmpty(final CharSequence cs) {
return cs == null || cs.length() == 0;
}
PHP中文网2017-04-17 17:53:37
1. Kaedah equals()
wujud dalam kelas Object
Semua kelas pembungkusan seperti Integer
, Long
, dll. telah melaksanakan semula fungsi ini jika anda menulis kelas sendiri dan menggunakannya kaedah class equals(), kesan kaedah ini bersamaan dengan "==", ia akan menentukan sama ada rujukan objek kedua-dua kelas adalah sama, dan dalam kelas pembalut equals
akan menentukan sama ada kandungan objek adalah sama.
2. Jika penghakiman ditulis sebagai if(id.equals("")&&id!=null)
, akan ada masalah NullPoint Jika nilai id adalah batal, pengecualian akan dilemparkan jika anda mengalih keluar panggilan ke kaedah equals()
.
3.
Terangkan program di atasstr1 == str2
Apa yang membandingkan ialah sama ada kedua-dua rujukan adalah sama Rentetan yang kami isytiharkan akan disimpan dalam kolam pemalar rentetan Apabila str1
, abc akan dimasukkan ke dalam kolam pemalar.str3
mula-mula akan menyemak sama ada terdapat rentetan abc
dalam kolam malar Jika ya, ia akan dirujuk terus. Oleh kerana str2 terus mencipta objek baharu, alamat mestilah berbeza daripada str1. Kemudian mengapa ia sama selepas menggunakan kaedah intern
Apabila kaedah
dipanggil, jika kolam sudah mengandungi rentetan yang sama dengan objek Rentetan ini, rentetan dalam kolam akan dikembalikan masa, ia tidak akan menghasilkan rentetan baharu. Oleh kerana rentetan dalam kolam malar masih dirujuk, nilai pulangan intern
masih str2.intern() == str1
. true
ringa_lee2017-04-17 17:53:37
id==null
bermakna id rujukan tidak menunjuk ke mana-mana objek, ia hanya rujukan; hanya objek tertentu dalam Java boleh memanggil kaedah (di sini adalah equals()
). Jadi memanggil id==null
apabila equals()
akan membuang NullPointerException
.
天蓬老师2017-04-17 17:53:37
Kod ini ditulis secara salah Ia tidak menggunakan sama untuk membandingkan rentetan kosong, dan terdapat banyak rentetan kosong, seperti tab, carriage return, dll. Tiada semakan yang boleh dibuat digunakan, seperti StingUtils dalam apache commons Kaedah .isBlank dan kaedah Guava's Strings.isNullOrEmpty boleh menentukan status rentetan nol dan kosong.
天蓬老师2017-04-17 17:53:37
Anda masih perlu memahami perbezaan antara == dan sama, perbezaan antara "" dan nol
== adalah untuk membandingkan sama ada nilainya sama atau sama ada alamat jenis rujukan adalah sama >equals adalah untuk membandingkan nilai alamat jenis rujukan, iaitu kandungan Adakah mereka sama