cari

Rumah  >  Soal Jawab  >  teks badan

Java:判断字符串相等

PHPzPHPz2802 hari yang lalu946

membalas semua(5)saya akan balas

  • 黄舟

    黄舟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.

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

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

    balas
    0
  • PHPz

    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();

    balas
    0
  • ringa_lee

    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();
    

    balas
    0
  • PHP中文网

    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 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

    balas
    0
  • Batalbalas