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方法。请帮助!!
答案 0 :(得分:0)
答案 1 :(得分:0)
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,因为它们都是"示例",但是第二个不会因为"示例"不是"另一个"。