1.equals方法可以被重写,而且推荐将euqals和hashcode两个方法一起重写,之后比较的是hashcode,
不重写equals方法的话,会调用父类的equals方法,追溯到Object的话 euqals 就是 ==
==这个不能被重写,比较的是是否指向同一个对象实例
2.equals方法的参数是Object,所以两者不需要是同一类型的对象
==如果两者不是相同类型,编译器会报错
例如:
class Demo
{
public static void main(String[] args)
{
Person p1=new Person("zhansan",20);
Person p2=new Person("zhansan",20);
System.out.println(p1.equals(p2)+"---"+(p1==p2));//false false
/*
equals是Object类中的方法,是判断对象是否相同,即判断地址是否一样 ,所以p1.equals(p2)结果是false;而==是比较运算符,p1和p2是各指向两个对象,因此结果为false
*/
String s1=new String("lisi");
String s2=new String("lisi");
System.out.println(s1.equals(s2)+"---"+(s1==s2));//true false
/*
字符串中的equals方法是重写了object中的equals方法,判断两个字符串是否相同。所以s1.equals(s2)结果是true;而s1和s2是各指向两个字符串变量,因此为false
*/
String s3="lisi";
System.out.println(s1.equals(s3)+"---"+(s1==s3));//true false
/*
这其中涉及到了字符串引用型变量实例化时,先查询内存中是否已经有“lisi”字符串对象,如果有了,则指向该对象。否则,新建字符串对象。所以s1.equals(s3)结果是true,而s1!=s3与第二种情况相同。
*/
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
} |