📜  Java字符串之equals(1)

📅  最后修改于: 2023-12-03 14:43:00.659000             🧑  作者: Mango

Java字符串之equals

在Java中,字符串是一种非常常见的数据类型。而字符串之间的比较是程序开发中经常用到的操作。在Java中,我们可以使用equals()方法来比较两个字符串是否相等,这也是本文要介绍的主题。

equals()方法

equals()方法是在Object类中定义的,所以所有的Java类都继承了equals()方法。但是,默认情况下,equals()方法比较的是两个对象的引用是否相等。也就是说,如果两个对象的引用指向同一个对象,那么它们就相等,否则不相等。这种比较对于字符串来说并没有任何意义,所以我们需要重写equals()方法,使其比较字符串的内容是否相等。

重写equals()方法

我们可以通过重写equals()方法来比较字符串的内容是否相等。在重写equals()方法时,需要满足以下几个条件:

  • 对称性:如果a.equals(b)为true,那么b.equals(a)也应该为true;
  • 反射性:a.equals(a)应该为true;
  • 传递性:如果a.equals(b)为true,而b.equals(c)也为true,那么a.equals(c)也应该为true;
  • 一致性:如果a.equals(b)为true,在对象没有被修改的情况下,多次调用a.equals(b)应该返回true;
  • 对null值的处理:a.equals(null)应该返回false。

下面是一个比较两个字符串内容是否相等的equals()方法实现:

public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (!(obj instanceof String)) {
        return false;
    }
    String str = (String) obj;
    if (this.length() != str.length()) {
        return false;
    }
    for (int i = 0; i < this.length(); i++) {
        if (this.charAt(i) != str.charAt(i)) {
            return false;
        }
    }
    return true;
}

在这个实现中,首先判断两个引用是否指向同一个对象,如果是,则直接返回true,否则判断obj是否是String类型,如果不是,则返回false。接着比较两个字符串的长度是否相等,如果不相等,则直接返回false。最后,比较两个字符串的每个字符是否相等,如果有不相等的字符,则返回false,否则返回true。

示例演示

下面是一个示例演示两个字符串是否相等:

String str1 = "hello";
String str2 = "hello";
String str3 = "world";

System.out.println(str1.equals(str2)); // 输出true
System.out.println(str1.equals(str3)); // 输出false

在这个示例中,我们定义了两个字符串str1和str2,它们的内容都是"hello",所以调用equals()方法比较它们的内容应该相等,结果输出的是true。而str1和str3的内容不同,所以调用equals()方法比较它们的内容应该不相等,结果输出的是false。

总结

在Java中,使用equals()方法比较两个字符串是否相等是一种基础操作。在比较字符串内容时,一定要注意使用重写后的equals()方法,否则会得到不正确的结果。而重写equals()方法需要满足一定的规则,只有这样才能得到正确的比较结果。