java对象比较

1.前面讲过String类的equals()方法,此方法的主要功能是判断两个字符串的内容是否相等,现在要比较一个类的两个对象是否相等,要依次比较两个对象中的每一个属性的内容.

第一种对象比较形式

package lesson12;


class Deo{
    private String name;
    private int age;

    public Deo(String name,int age){
        this.name=name;
        this.age=age;
    }
    void setName(String name){
        this.name=name;
    }
    void setAge(int age){
        this.age=age;
    }
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }

}
public class TestDeo6 {

    public static void main(String[] args) {
        Deo deo1=new Deo("芷若",20);   //实例化对象
        Deo deo2=new Deo("芷若",20);   //实例化对象

        if (deo1.getName().equals(deo2.getName()) && deo1.getAge()==deo2.getAge()){  //属性比较
            System.out.println("是同一个对象");

        }else{
            System.out.println("不是同一个对象");
        }

    }
}

运行结果
虽然实现了两个对象比较,但是以上代码进行对象比较过程中采用了客户端来判断,不合适,这种比较操作应该是每一个对象自己应该具备的功能,由本类完成.
在这里插入图片描述

第二种对象比较形式

package lesson12;


class Deo{
    private String name;
    private int age;

    public Deo(String name,int age){
        this.name=name;
        this.age=age;
    }

    //一个类可以接收本类引用,接收完成之后可以直接调用本类的私有操作

    public boolean compare(Deo per){
        if (per==null){            //比较对象为null
            return false;          //直接返回false
        }
        if (this==per){
            return true;        //地址相同
        }
        //这样一来compare()方法之中有两个对象,传入的Person,另一个是this
        if (this.name.equals(per.name)&&this.age==per.age){
            return true;
        }
        return false;
    }


    void setName(String name){
        this.name=name;
    }
    void setAge(int age){
        this.age=age;
    }
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }

}
public class TestDeo6 {

    public static void main(String[] args) {
        Deo deo1=new Deo("芷若",20);   //实例化对象
        Deo deo2=new Deo("芷若",20);   //实例化对象

        if (deo1.compare(deo2)){  //只关心比较结果
            System.out.println("是同一个对象");

        }else{
            System.out.println("不是同一个对象");
        }

    }
}

运行结果
在Deo内部定义了一个compare()方法,而此时方法所完成的功能就是进行比较,并且当一个类接受了本类对象引用后,可以直接调用本类中的私有化操作.所以compare()方法就有了两个实例化对象,一个传入为Deo类对象,一个当前对象this.
在这里插入图片描述
对象比较的特点:
本类接收自己的引用,而后与本类当前对象(this)进行操作
为了避免NullPointerException的产生,首先增加一个null的判断
为了防止浪费性能的情况出现(要判断属性会多),可以增加地址数值的判断,因为相同的对象地址相同.
进行属性的依次比较,如果属性全部相同,则返回true,否则返回false.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值