【问题标题】:equals for String vs equals for Employee/othr class [duplicate]字符串的等于与员工/其他类的等于[重复]
【发布时间】:2016-08-04 04:53:23
【问题描述】:
public class Employee {

    String name;

public Employee(String var){ this.name=var;}

} 

public class Main {

    public static void main(String[] args){

        String s1=new String("joe");
        String s2=new String("joe");

        Employee e1=new Employee("joe");
        Employee e2=new Employee("joe");

        system.out.println("When comparing String obj:"+s1.equals(s2));  output:TRUE

        system.out.println("When comparing Employee obj:+e1.equals(e2)): output:FALSE

我知道我们必须重写 Employee 类,但为什么它适用于 String 类,我也无法在 Oracle 文档中找到 String 类的 equals 重写方法。请需要帮助!!

【问题讨论】:

标签: java string object equals hashcode


【解决方案1】:

在第一种情况下,您正在检查字符串。

在第二种情况下,您正在检查员工的对象。

因为两个对象有不同的内存地址。

more details

【讨论】:

    【解决方案2】:

    String.equals() 如果两个字符串不为空且包含相同的字符序列,则返回 true,如 Oracle 文档中所指定。这与 Object.equals() 不同:如果两个引用指向内存中的同一个对象,Object.equals() 返回 true,请参阅 https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

    【讨论】:

    • 感谢 @candilus 只查看 Oracle 文档但无法找到它。幸运的是我现在可以看到它 :)
    【解决方案3】:

    示例之所以如此工作,是因为 String 重写了 equals 方法来检查 String 的内容,而 Employee 类使用 Object.equals 方法来检查内存位置。

    【讨论】:

      【解决方案4】:

      不同的类对于使两个对象“相等”的标准不同。通常,equals() 如果是同一个 Object,则返回 true:

      Object a = new Object();
      Object b = new Object();
      return(a.equals(b));
      

      这将返回 false,尽管它们都是“对象”类,但它们不是同一个实例。 a.equals(a) 将返回 true。

      但是,在像字符串这样的情况下,您可以有 2 个不同的实例,但字符串相等是基于组成这些字符串的文字字符:

      String a = new String("example");
      String b = new String("example");
      String c = new String("another");
      a.equals(b);
      a.equals(c);
      

      这些都是 String 的不同实例,但第一个 equals 将返回 true,因为它们都是“example”,但第二个不会,因为“example”不是“another”。

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 2013-06-02
        相关资源
        最近更新 更多