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.
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.
== 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
Saya mengetahuinya kerana saya tidak berhati-hati semasa membaca;
String
menulis semula kaedahhashCode
dan nilaihashCode
nya ditentukan oleh kandungan, bukan alamatMenggunakan == 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.
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.
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