java 中两个 String 具有相同的 hashCode 使用 == 判断返回 false ?
高洛峰
高洛峰 2017-04-18 10:06:30
0
5
535
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(5)
刘奇

Saya mengetahuinya kerana saya tidak berhati-hati semasa membaca;
String menulis semula kaedah hashCode dan nilai hashCodenya ditentukan oleh kandungan, bukan alamat

巴扎黑

Menggunakan == untuk menentukan String dalam Java adalah untuk menentukan alamat dua objek dan bukannya hashCode. Kerana anda mempunyai dua objek String, dan kerana anda menggunakan baharu untuk kedua-duanya, menggunakan == adalah palsu.

巴扎黑
  1. Kod hash dan == adalah berbeza. == membandingkan alamat memori, dan kod hash dikira berdasarkan pembolehubah contoh.

  2. Anda menggunakan baharu untuk mencipta dua kejadian String (kata kunci baharu akan membuka ruang memori baharu), dan bukannya merujuk terus "hello" dalam kumpulan rentetan Berikut ialah kod sumber pembina ini.

    public String(String original) {
       this.value = original.value;
       this.hash = original.hash;
    }

    Kaedah pengiraan cincang String adalah berdasarkan nilai dan cincang dalam kod di atas.

大家讲道理

== Apa yang dibandingkan ialah alamat memori dan sama dengan hampir diperolehi daripada setiap aksara rentetan Setiap aksara adalah sama dan cincang adalah sama, tetapi alamat memori berbeza

洪涛

== menentukan sama ada dua pembolehubah rujukan menghala ke objek yang sama. Apabila kandungan dua objek adalah sama, kod cincang mereka adalah sama, tetapi rujukannya tidak sama

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!