2.13、对象的比较

  1. 2.13、对象的比较

2.13、对象的比较

以下这个例子中,生成两个对象,当对象中年龄和姓名完全相等的时候,则认为两个对象是相等的,此时有两个问题

  • 如何进行对象比较
  • 在哪块对象比较

String本身是一个类,如果要进行相等比较,需要使用equls(),而,age是Int,直接使用==判断。

class Person{  // 定义Person类
    private String name ; // 姓名
    private int age ;  // 年龄
    public Person(String name,int age){
        this.setName(name) ;
        this.setAge(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 class Demo02 {
    public static void main(String args[]) {
        Person per1 = new Person("张三",30) ; // 声明两个对象,内容完全相等
        Person per2 = new Person("张三",30) ; // 声明两个对象,内容完全相等
        // 直接在主方法中依次取得各个属性进行比较
        if(per1.getName().equals(per2.getName())&&per1.getAge()==per2.getAge()){
            System.out.println("两个对象相等!") ;
        }else{
            System.out.println("两个对象不相等!") ;
        }
    }
}

运行结果:

两个对象相等!

以上代码,功能确实实现了,但是由于代码暴露在外面,不安全,容易出错。应该由自己进行比较最合适,所以应该在Person类中增加一个比较的方法。当前对象调用传人的对象,当前对象即调用方法的对象,用this表示,这里表示在哪里比较。

如下:

class Person{  // 定义Person类
    private String name ; // 姓名
    private int age ;  // 年龄
    public Person(String name,int age){
        this.setName(name) ;
        this.setAge(age) ;
    }
    public boolean compare(Person per){
        // 调用此方法时里面存在两个对象:当前对象、传入的对象
        Person p1 = this ; // 当前的对象,就表示per1
        Person p2 = per ; // 传递进来的对象,就表示per2
        if(p1==p2){ // 判断是不是同一个对象,用地址比较
            return true ;
        }
        // 之后分别判断每一个属性是否相等
        if(p1.name.equals(p2.name)&&p1.age==p2.age){
            return true ; // 两个对象相等
        }else{
            return false ; // 两个对象不相等
        }
    }
    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 class Demo02 {
    public static void main(String args[]) {
        Person per1 = new Person("张三",30) ; // 声明两个对象,内容完全相等
        Person per2 = new Person("张三",30) ; // 声明两个对象,内容完全相等
        // 直接在主方法中依次取得各个属性进行比较
        if(per1.compare(per2)){
            System.out.println("两个对象相等!") ;
        }else{
            System.out.println("两个对象不相等!") ;
        }
    }
}

转载请注明来源