1. Membandingkan rentetan

Ini semua baik dan baik. Tetapi anda boleh melihat bahawa rentetan s1dan s2sebenarnya adalah sama, bermakna ia mengandungi teks yang sama. Apabila membandingkan rentetan, bagaimana anda memberitahu program untuk melihat bukan pada alamat Stringobjek, tetapi pada kandungannya?

Untuk membantu kami dengan ini, kelas Java Stringmempunyai equalskaedah. Memanggilnya kelihatan seperti ini:

string1.equals(string2)
Membandingkan dua rentetan

Kaedah ini kembali truejika rentetan adalah sama, dan falsejika ia tidak sama.

Contoh:

Kod Catatan
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

Lebih banyak contoh:

Kod Penjelasan
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
true


2. Perbandingan rentetan tidak sensitif huruf besar-besaran

Dalam contoh terakhir, anda melihat bahawa perbandingan menghasilkan . Sesungguhnya, rentetan itu tidak sama. Tetapi..."Hello".equals("HELLO")false

Jelas sekali, rentetannya tidak sama. Yang berkata, kandungan mereka mempunyai huruf yang sama dan hanya berbeza mengikut kes huruf. Adakah terdapat cara untuk membandingkannya dan mengabaikan kes surat? Iaitu, supaya menghasilkan ?"Hello".equals("HELLO")true

Dan jawapan kepada soalan ini adalah ya. Di Jawa, Stringjenis ini mempunyai kaedah khas lain: equalsIgnoreCase. Memanggilnya kelihatan seperti ini:

string1.equalsIgnoreCase(string2)

Nama kaedah diterjemahkan secara kasar sebagai bandingkan tetapi abaikan kes . Huruf dalam nama kaedah termasuk dua baris menegak: yang pertama ialah huruf kecil L, dan yang kedua ialah huruf besar i. Jangan biarkan itu mengelirukan anda.

Contoh:

Kod Catatan
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


3. Contoh perbandingan rentetan

Mari berikan hanya satu contoh mudah: katakan anda perlu memasukkan dua baris dari papan kekunci dan tentukan sama ada ia sama. Inilah rupa kod tersebut:

Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);

4. Nuansa perbandingan rentetan yang menarik

Terdapat satu nuansa penting yang perlu anda ketahui.

Jika pengkompil Java menemui berbilang rentetan yang sama dalam kod anda (khususnya dalam kod anda), maka ia akan mencipta hanya satu objek untuk mereka untuk menjimatkan memori.

String text = "This is a very important message";
String message = "This is a very important message";

Dan inilah yang akan terkandung dalam memori sebagai hasilnya:

perbandingan rentetan

Dan jika anda membandingkan text == messagedi sini, maka anda mendapat true. Jadi jangan terkejut dengan itu.

Jika atas sebab tertentu anda benar-benar memerlukan rujukan yang berbeza, maka anda boleh menulis ini:

String text = "This is a very important message";
String message = new String ("This is a very important message");

Atau ini:

String text = "This is a very important message";
String message = new String (text);

Dalam kedua-dua kes ini, pembolehubah textdan messagemenghala ke objek berbeza yang mengandungi teks yang sama.