嗯 我开始也是这么记住的==比较的是地址值,equals比较的是内容,String复写了object的equals方法。其实我举个例子你就明白了 为什么equals用的是==却比较的是内容
class Person
{
/*
public boolean equals(Object obj)//Object obj = p2;
{
return this == obj;//比较地址值
}
*/
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)//Object obj = p2;多态,父类引用指向自己的子类对象
{
//调用这个方法的对象,和传递对象地址值一致,同一个对象,直接返回true
if(this == obj)
return true;
//原先是比较地址值,改变比较形式,比较的是对象中的年龄
if(obj instanceof Person)
{
Person p = (Person)obj;//将父类的引用强转成子类的实例对象
return this.age == p.age;//或者换成name比较也可以
}
return false;
}
}
class ObjectDemo
{
public static void main(String[] args)
{
Person p1 = new Person("悟空",500);
Person p2 = new Person("八戒",800);
boolean b = p1.equals(p1);//这样比较的就是内容了
System.out.println("b="+b);
System.out.println("p1==p2"+(p1==p2));//比较的是地址值
}
}
希望对你的理解有帮助 |