Rumah > Soal Jawab > teks badan
怪我咯2017-04-18 10:08:30
Saya mengetahuinya kerana saya tidak berhati-hati semasa membaca; String
menulis semula kaedah hashCode
dan nilai hashCode
nya ditentukan oleh kandungan, bukan alamat
巴扎黑2017-04-18 10:08:30
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.
巴扎黑2017-04-18 10:08:30
Kod hash dan == adalah berbeza. == membandingkan alamat memori, dan kod hash dikira berdasarkan pembolehubah contoh.
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.
大家讲道理2017-04-18 10:08:30
== 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
PHP中文网2017-04-18 10:08:30
== 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