Java:判断字符串相等
PHPz
PHPz 2017-04-18 10:46:45
0
5
964
PHPz
PHPz

学习是最好的投资!

membalas semua(5)
黄舟
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.

左手右手慢动作

Gunakan equals() untuk menilai kesamaan rentetan Soalan ini malah gagal dalam Java!

PHPzhong

a.intern(); tidak akan mengubah rujukan aksara, ia mempunyai nilai pulangan.
Yang berikut akan sama

String b = a.intern();
左手右手慢动作
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();
洪涛

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 asas

String 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".

  1. Bahagikan ruang memori dan buat suhu tatasusunan sementara

  2. temp[0] = 'a';temp[1] = 'b';temp[2] = 'c';

  3. Buat nilai tatasusunan dan halakan ruang memori yang ditunjuk mengikut nilai ke ruang memori yang ditunjuk oleh temp, iaitu &value = &temp (jika a = "abc" digunakan, langkah ini tidak diperlukan)

Kaedah pelatih ialah kaedah yang disediakan oleh jdk1.5 dan digunakan untuk pengoptimuman memori String yang sama merujuk kepada ruang memori yang sama, yang sebenarnya merupakan langkah ketiga di atas. Jika a dan b adalah sama di sini, ia boleh ditulis sebagai

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:

  1. Bahagikan ruang memori dan cipta nilai tatasusunan

  2. nilai[0] = a.nilai[0];nilai[1] = a.nilai[0]';nilai[2] = a.nilai[0];

Dalam langkah kedua, nilai[0] dalam String a dalam nilai[0] dalam String b sebenarnya menunjuk ke alamat memori yang sama, jadi sebenarnya b.value[0] = a.value[0 ] = 'a ', tetapi b.value tidak sama dengan a.value Sebab asasnya ialah kawasan memori yang ditunjuk adalah berbeza

Adalah disyorkan untuk melihat analisis kod sumber String

[Analisis kod sumber JAVA - Java.lang] Analisis kod sumber rentetan

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