CodeGym /Java Blog /Toto sisi /Java 字串 equals()
John Squirrels
等級 41
San Francisco

Java 字串 equals()

在 Toto sisi 群組發布
比較物件的等價性是最重要的程式設計操作之一。然而,儘管其在數位世界中顯而易見,但如何比較其他資料類型並不總是很清楚。Java Object類別是一個基本類,它定義了equals()compareTo()方法進行比較。String 類別重寫其equals()方法。Java String equals()方法根據兩個字串的內容進行比較。String equals()方法簽名如下所示:
public boolean equals(Object anotherObject)
String equals()方法將字串與指定物件進行比較。如果字串相等,則傳回 true,否則傳回 false。您可能想知道為什麼不使用==比較運算子來比較字串?其實這也是可以的,但結果會有些不同。事實上,==運算子比較記憶體中的位址。因此,如果s1 == s2傳回true,則這兩個字串在記憶體中具有相同的位址。同時,equals檢查字串的內容是否相等。Java 字串 equals() - 1讓我們舉一個比較兩個字串的例子。
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

   }
}
該程式的輸出是:
真假真真假
讓我們仔細看看這裡發生了什麼。當我們創建一個字串時,它被放置在字串池中,這是一個特殊的記憶體區域。在任何大型程式中,字串佔據所有物件的很大一部分。因此,為了節省內存,創建了字串池,其中放置包含所需文字的字串。以後新建立的連結引用相同的記憶體區域,不需要每次都分配額外的記憶體。如果你建立一個沒有new運算元的字串,也就是說,當你寫
String  myStringName = "...........................................",
或類似的東西,程式檢查字串池中是否存在包含此類文字的字串。如果是,則不會建立新的字串。新連結將指向字串池中已儲存該字串的相同位址。那麼當我們在程式中寫入
String myString1 = "here is my favorite string";
String myString2 = "here is my favorite string";
引用myString1指向記憶體中與myString2完全相同的位置。第一個命令在字串池中使用我們需要的文字建立了一個新字串,當執行第二個命令時,它只是引用與myString1相同的記憶體區域。但是字串myString4是使用new運算子建立為物件的。此運算符在建立物件時在記憶體中為其分配一個新區域。用 new 建立的字串
String myString1 = new String ("here is my favorite string");
String myString2 = new String ("here is my favorite string");
不會落入字串池,而是成為一個單獨的對象,即使它的文字與字串池中的相同字串完全匹配。此外,如果我們使用 String equals()方法比較字串,它不會檢查位址,而是檢查字串的內容,即字串中的字元順序。如果字串中的文字相同,那麼它們如何創建以及儲存在字串池中或單獨的記憶體區域中的位置並不重要。這就是為什麼myString1myString2myString4在此比較中相等的原因。順便說一句,您是否注意到 String equals()方法允許您以區分大小寫的方式正確比較字串?也就是說,如果我們將字串“my string”與字串“My string”和“MY STRING”進行比較,我們會得到 false。
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

   }
}
輸出在這裡:
假假
為了以不區分大小寫的方式比較字串,Java 有一個與equals非常相似的方法:
boolean equalsIgnoreCase​(String anotherString)
讓我們在我們的範例中使用它。
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));

   }
}
現在輸出是:
真實真實
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION