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.
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 == str2Apa 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 internApabila 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
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.
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.
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
Pertama sekali, cara penulisan anda
id!=""
adalah salah. Anda harus menulisnya sebagai!id.equals("")
.Kedua, anda mesti faham maksud
==
danequals
==
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.Ia telah ditulis seperti ini sepanjang masa. Saya tertanya-tanya mengapa?
Rentetan kosong sebenarnya memerlukan sama, jika tidak ralat akan berlaku. null boleh digunakan!=
Kod berikut, hasilnya palsu
Jadi equals mesti digunakan untuk menentukan rentetan kosong, seperti
Atau gunakan panjang untuk menentukan dan mengembangkan ke mana-mana CharSequence, seperti
1. Kaedah
equals()
wujud dalam kelasObject
Semua kelas pembungkusan sepertiInteger
,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 pembalutequals
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 kaedahequals()
.3.
Terangkan program di atas
Itu sahaja. (●'◡'●)str1 == str2
Apa yang membandingkan ialah sama ada kedua-dua rujukan adalah sama Rentetan yang kami isytiharkan akan disimpan dalam kolam pemalar rentetan Apabilastr1
, abc akan dimasukkan ke dalam kolam pemalar.str3
mula-mula akan menyemak sama ada terdapat rentetanabc
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 kaedahintern
Apabila kaedahdipanggil, 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
masihstr2.intern() == str1
.true
id==null
bermakna id rujukan tidak menunjuk ke mana-mana objek, ia hanya rujukan; hanya objek tertentu dalam Java boleh memanggil kaedah (di sini adalahequals()
). Jadi memanggilid==null
apabilaequals()
akan membuangNullPointerException
.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.
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