如果现在想要确认两个对象是否相等,那么应该比较的是对象的完整信息,
而对象的完整信息就是对象的属性,所以所谓的对象比较指的就是两个对象的属性进行比较。
范例:对象比较的实现
(如果返回的是String的实例化对象就能继续调用String类的方法)
class Person{
private String name;
private int age;
public void setName(String name) {
this.name=name;
}
public void setAge(int age) {
this.age=age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public Person(String name,int age) {
this.name=name;
this.age=age;
}
}
public class StringDemo {
public static void main(String args[]) {
Person perA=new Person("张三",20);
Person perB=new Person("张三",20);
if(perA.getName().equals(perB.getName())
&&perA.getAge()==perB.getAge())
{
System.out.println("两个对象相等!");
}else {
System.out.println("两个对象不等");
}
}
}
虽然这个时候已经实现了对象的比较,但是这种操作一定不可能在实际工作中出现,
因为客户端(主方法、调用处)需要涉及到的逻辑太多了 。
对于对象比较的操作应该是一个类本身所具备的功能,而不应该变为外部操作
范例:对象比较实现二
(现在假设对象比较的方法名称暂时为compare())
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
//这个时候会有两个对象:this表示当前对象,另外一个是传入对象
public boolean compare (Person per) {
if(per==this) //传入对象与当前对象的地址相同
return true;
if(per==null)//如果传空(null),this.name就无属性也就是没内容会报空指针异常
return false;
//此时per对象已经在类的内部了,所以不受封装局限
//可以直接利用“对象.属性”进行访问(属于固定概念)
if(this.name.equals(per.name)&&this.age==per.age)
{
return true;
}
return false;
}
}
public class TestDemo {
public static void main(String args[]) {
Person perA=new Person("张三",20);
Person perB=new Person("张三",20);
//需要根据对象所拥有的属性信息来进行完整比对
if(perA.compare(perB)) {
System.out.println("两个对象相等!");
}else {
System.out.println("两个对象不等!");
}
}}