Rumah > Soal Jawab > teks badan
黄舟2017-04-18 10:48:45
String a = new String("abc");
a = a.intern();
String b = "abc";
if (a == b) {
System.out.println("相等");
} else {
System.out.println("不等");
}
Anda memanggil kaedah a.intern()
, tetapi anda tidak menetapkan semula hasil pulangan a
masih a
yang asal.
ringa_lee2017-04-18 10:48:45
Gunakan equals()
untuk menilai kesamaan rentetan Soalan ini malah gagal dalam Java!
PHPz2017-04-18 10:48:45
a.intern(); tidak akan mengubah rujukan aksara, ia mempunyai nilai pulangan.
Yang berikut akan sama
String b = a.intern();
ringa_lee2017-04-18 10:48:45
String a = new String("abc");
Di sini a dan "abc" ialah dua objek Apabila kaedah pelatih dipanggil, kumpulan pemalar aksara sudah mengandungi rentetan yang sama dengan objek ini, jadi panggilan kaedah pelatih tidak berguna, walaupun ia diikuti oleh b=" abc", b dan a bukan objek yang sama.
Jika anda mahu outputnya sama, sama ada ayat pertama menjadi:
String a = "abc";
Atau ayat kedua menjadi:
a = a.intern();
PHP中文网2017-04-18 10:48:45
Perkara pertama yang perlu diketahui ialah operasi == menentukan sama ada dua objek atau jenis asas a dan b menghala ke kawasan memori yang sama
Pelaksanaan asasString ialah
nilai akhir peribadi[]
Apabila String diwujudkan, ia sebenarnya membahagikan memori berterusan untuk menyimpan tatasusunan aksara melalui System.arraycopy.
new String("abc") sebenarnya tidak disyorkan untuk memulakan String dengan cara ini Pelaksanaan sebenar memerlukan satu langkah lagi daripada a = "abc".
String a = "abc";
String b = "abc".intern(); 或者String b = a.intern();
Operasi sebenar adalah langkah ketiga di atas, iaitu, b = a;Pelaksanaan asas sebenar
String b = "abc" ialah:
Adalah disyorkan untuk melihat analisis kod sumber String
[Analisis kod sumber JAVA - Java.lang] Analisis kod sumber rentetan