class Person
{
private String name;
private String idString;
public Person(String name,String idString)
{
this.name = name;
this.idString=idString;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getIdString()
{
return idString;
}
public void setIdString(String idString)
{
this.idString = idString;
}
public boolean equals(Object obj)
{
if(this==obj)//判断两个对象是否为同一个对象
return true;//如果此处返回为false,即使返回的同一个对象也会使结果为false
if (obj!=null&&obj.getClass()==Person.class)//判断obj是否为person实例。不能用instanceof判断
//因为instanceof除了前面是后面的实例还有子类的情况下会返回true
{
Person person=(Person)obj;
if (this.getIdString()==(person.getIdString())
&&this.getName()==(person.getName()))
{
return true;
}
}
return false;
}
}
public class PrintObject
{
public static void main(String[] args)
{
Person p1 = new Person("北京","122");
Person p2=new Person("北京","122");
Person p3=new Person("上海", "12545609");
System.out.println("p1与p2是否相等"+ (p1==p2));
System.out.println("p1与p2是否相等"+ p1.equals(p2));//注意此处与上一句的输出结果区别
System.out.println("p3与p2是否相等"+p3.equals(p2));
}
}
我们可以看到这样的输出结果:
p1与p2是否相等false
p1与p2是否相等true
p3与p2是否相等false
理由:“==”是判断两个变量是否相等,当两个变量都是引用类型变量,他们必须指向同一个对象,才会放回true,而且注意:"=="不能用于比较没有继承关系的两个对象。
当判断基本数据类型时,一般都是数值类型,只要两个变量的值相等就可。
在object类中默认的equals其实与==没有任何区别,但是string中的equals是被重写过得,只要两个字符串的字符序列相同即可,不需要同一个对象。所以在实际应用中我们一般需要重写equals方法