equals for String vs equals for Employee / othr class

时间:2016-08-04 04:53:23

标签: java string object equals hashcode

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 docs for String类中找到equals override方法。请帮助!!

4 个答案:

答案 0 :(得分:0)

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

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

  

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

more details

答案 1 :(得分:0)

如果两个字符串不为null并且包含相同的字符序列,则

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)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不同的类对于使2个对象"等于"的内容有不同的标准。通常,如果equals()是相同的Object,则返回true:

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

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

但是,在类似String的情况下,您可以有2个不同的实例,但字符串相等性是基于构成这些字符串的文字字符:

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

这些都是String的不同实例,但是第一个等于将返回true,因为它们都是"示例",但是第二个不会因为"示例"不是"另一个"。