Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?
大家讲道理
大家讲道理 2017-04-17 17:51:37
0
8
521

if(id!=null&&id!="")
代码中经常这样写,空字符串跟null 都不用equals吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(8)
小葫芦

Pertama sekali, cara penulisan anda id!="" adalah salah. Anda harus menulisnya sebagai !id.equals("").
Kedua, anda mesti faham maksud == dan equals

  1. == 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.

  2. 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!=

Peter_Zhu

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;
}
Ty80

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

Itu sahaja. (●'◡'●)

左手右手慢动作

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.

Peter_Zhu

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.

Peter_Zhu

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan