CodeGym /Java 博客 /随机的 /Java 字符串 equals()
John Squirrels
第 41 级
San Francisco

Java 字符串 equals()

已在 随机的 群组中发布
比较对象的等价性是最重要的编程操作之一。然而,尽管其在数字世界中显而易见,但如何比较其他数据类型并不总是很清楚。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