CodeGym /Blog Java /rawak /Java String sama dengan()
John Squirrels
Tahap
San Francisco

Java String sama dengan()

Diterbitkan dalam kumpulan
Membandingkan objek untuk kesetaraan adalah salah satu operasi pengaturcaraan yang paling penting. Walau bagaimanapun, untuk semua kejelasannya dalam dunia berangka, tidak selalunya jelas cara membandingkan jenis data lain. Kelas Objek Java , yang asas, mentakrifkan kaedah equals() dan compareTo() untuk perbandingan. Kelas rentetan mengatasi kaedah equals() nya. Kaedah Java String equals() membandingkan dua rentetan mengikut kandungannya. String equals() kaedah tandatangan kelihatan seperti ini:
public boolean equals(Object anotherObject)
Kaedah String equals() membandingkan rentetan dengan objek yang ditentukan. Jika rentetan adalah sama, ia mengembalikan benar, jika tidak ia palsu. Anda mungkin tertanya-tanya mengapa tidak membandingkan rentetan menggunakan operator perbandingan == ? Malah, ini juga mungkin, tetapi hasilnya akan agak berbeza. Hakikatnya ialah operator == membandingkan alamat dalam ingatan. Jadi jika s1 == s2 mengembalikan true , kedua-dua rentetan ini mempunyai alamat yang sama dalam ingatan. Pada masa yang sama, equals menyemak kandungan rentetan untuk kesamaan. Java String sama dengan() - 1Mari kita ambil contoh membandingkan dua rentetan.
public class StringEqualsTest {
   //program to test Java equals() method
   public static void main(String[] args) {
       String myString1 = "here is my favorite string";
       String myString2 = "here is my favorite string"; //this string is the same as the previous one, at least we think so
       String myString3 = "here is My favorite string"; //this string looks a little bit like previous two, but the first letter is big M instead of small m
       String myString4 = new String("here is my favorite string");
//here we create a String in an object manner… Why? Find out soon
       String myString5 = "equals to myString1? No, not at all..."; //here we have absolutely different string. Just for fun
    //let’s compare myString1 with myString2 using “==” operator
       System.out.println(myString1 == myString2); //true
    //let’s compare myString1 with myString4 using “==” operator
       System.out.println(myString1 == myString4); //false
//and now we are going to use equals() method to compare myString1 with myString4, myString2 and myString5
     System.out.println(myString1.equals(myString4));//true
       System.out.println(myString1.equals(myString2));//true
       System.out.println(myString1.equals(myString5)); //false

   }
}
Output program ini ialah:
benar palsu benar benar salah
Mari kita lihat dengan lebih dekat apa yang berlaku di sini. Apabila kita mencipta rentetan, ia diletakkan dalam kolam rentetan, kawasan ingatan khas. Rentetan mengambil sebahagian besar daripada semua objek dalam mana-mana program besar. Jadi untuk menjimatkan memori String Pool telah dicipta, di mana rentetan dengan teks yang anda perlukan diletakkan. Pautan yang baru dibuat kemudian merujuk kepada kawasan memori yang sama, tidak perlu memperuntukkan memori tambahan setiap kali. Jika anda mencipta rentetan tanpa pengendali baharu, iaitu apabila anda menulis
String  myStringName = "...........................................",
atau sesuatu seperti itu, program menyemak sama ada terdapat String dengan teks sedemikian dalam kolam String. Jika ya, tiada String baharu akan dibuat. Dan pautan baharu akan menghala ke alamat yang sama dalam Kolam String di mana String itu sudah disimpan. Jadi apabila kita menulis dalam program
String myString1 = "here is my favorite string";
String myString2 = "here is my favorite string";
rujukan myString1 menunjuk ke tempat yang sama dalam ingatan dengan myString2 . Perintah pertama mencipta rentetan baharu dalam String Pool dengan teks yang kami perlukan, dan apabila sampai ke yang kedua, ia hanya merujuk kepada kawasan memori yang sama seperti myString1 . Tetapi rentetan myString4 telah dicipta sebagai objek menggunakan pengendali baharu . Operator ini memperuntukkan kawasan baru dalam ingatan untuk objek apabila ia dicipta. Rentetan dibuat dengan baharu
String myString1 = new String ("here is my favorite string");
String myString2 = new String ("here is my favorite string");
tidak jatuh ke dalam Kolam Rentetan, tetapi menjadi objek yang berasingan, walaupun teksnya sepadan sepenuhnya dengan rentetan yang sama daripada Kolam Rentetan. Lebih-lebih lagi, jika kita membandingkan rentetan menggunakan kaedah String equals() , ia tidak akan menyemak alamat, tetapi kandungan rentetan, urutan aksara dalam rentetan. Dan jika teks dalam rentetan adalah sama, tidak kira bagaimana ia dicipta dan di mana ia disimpan, dalam Kolam Rentetan atau dalam kawasan memori yang berasingan. Itulah sebabnya myString1 , myString2 dan myString4 adalah sama dalam perbandingan ini. Ngomong-ngomong, adakah anda perasan bahawa kaedah String equals() membolehkan anda membandingkan rentetan dengan betul dalam cara sensitif huruf besar-besaran? Iaitu, jika kita membandingkan rentetan "rentetan saya" dengan rentetan "Rentetan saya" dan "STRING SAYA" kita mendapat palsu.
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");

       System.out.println(myString1.equals(myString2)); //false because first string myString1 has small m and myString2 has big M instead
       System.out.println(myString1.equals(myString3));//false because myString1 is in lowercase while myString3 is in uppercase

   }
}
Outputnya ada di sini:
palsu palsu
Untuk membandingkan rentetan dalam cara yang tidak sensitif huruf, Java mempunyai kaedah yang hampir sama dengan equals :
boolean equalsIgnoreCase​(String anotherString)
Mari kita gunakannya dalam contoh kita.
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");
     /* here we are going to use the brother of equals() method, equalsIgnoreCase(). It can help to check user input when case isn’t
important */
       System.out.println(myString1.equalsIgnoreCase(myString2));

       System.out.println(myString1.equalsIgnoreCase(myString3));

   }
}
Sekarang outputnya ialah:
betul betul
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION