17.重写equals()

//学生类
public class Student {
    //属性
    private int sid;//学员学号
    private String name;//姓名
    private int age;//年龄
    private double weight;//体重

    //无参构造方法
    public Student() {
        //使用无参构造方法构造学员时,为其属性赋值
        this.name="无名氏";
        this.age=18;
        this.weight=50;
    }

    //构造方法重载 :带参构造方法
    public Student(int sid,String name, int age, double weight) {
        this.sid=sid;
        this.name = name;
        this.weight = weight;
        if(age<18 || age>30){
            System.out.println("***输入的年龄为:"+age+",该年龄不合法,将重置!***");
            this.age=18;
        }else{
            this.age = age;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age<18 || age>30){
            System.out.println("***输入的年龄为:"+age+",该年龄不合法,将重置!***");
            return;

        }
        this.age = age;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    //重写equals()方法,如果学员学号、姓名都相同,证明是同一个学生
    //instanceof操作符用于判断一个引用类型所引用的对象是否是一个类的实例
    public boolean equals(Object o){
        if(this==o){
            return true;
        }
        if(! (o instanceof Student)){
            return false;
        }
        Student obj=(Student)o;
        if(this.sid==obj.sid && this.name.equals(obj.name)){
            return true;
        }else{
            return false;
        }
    }

    public static void main(String[] args) {
        //Student没有重写equals()时,下列两行代码结果:false;重写后,结果:true
        Student s1=new Student(1,"张三",20,55);
        Student s2=new Student(1,"张三",20,55);
        System.out.println(s1.equals(s2));
        //思考:字符串的比较
    }
}
时间: 2024-10-24 22:55:58

17.重写equals()的相关文章

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru

重写equals方法需要注意的几点

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求:1.自反性:对于任何非空引用x,x.equals(x)应该返回true

Java:重写equals()和hashCode()

以下内容总结自<Effective Java>. 1.何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查“实参是否为正确的类型”. [2]对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值. [2.1]对于非float和double类型的原语类型域,使用==比较: [2.2]对于对象引用域,递归调用equals方法: [2.3]对于float域,使用Float.float

JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { private String province; private String city; public String getProvince() { return province; } public void setProvince(String province) { this.province = p

Java的重写equals但不重写hashCode方法的影响

首先,说下equals和hashCode的关系.JDK API中关于Object类的equals和hashCode方法中说过,总结起来就是两句话:equals相等的两个对象的hashCode也一定相等,但hashCode相等的两个对象不一定equals相等. hashCode类似于一个位置值(不叫地址值,是想把每个对象所在的位置做地址值),HashSet.HashMap等集合类中常会用到. 上图中假设是对象在内存中的模型,则7—c就是位置值即hashCode,而71—74就是地址值.所以x,y和

关于java重写equals方法

首先为什么要重写equals方法呢? 这可能是我们比较关心的一个问题. 我个人的理解是,因为java Object类中自带的equals方法可能往往功能不够用. 所以我们需要重写他,给他自定义一些功能或者说是拿去特定的地方去用. 比如说我们要比较两个对象中的是否相同.我们就要拿这2个对象中的属性是否相同. 但是Object类中提供的方法没有提供这样的功能,所以我们这个时候就需要重写. 我们来看下例子(附带一些本人的理解,只做参考,欢迎批评指正.) 1 public class EqualsOve

重写equals和hashcode

Object的hashCode()方法,返回的是当前对象的内存地址. 以下内容总结自<Effective Java>. 1.何时需要重写equals() 当一个类有自己特有的"逻辑相等"概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查"实参是否为正确的类型". [2]对于类中的每一个"关键域",检查实参中的域与当前对象中对应的域值. [2.1]对于非float和double类型的原语类

重写equals()和hashCode()

什么时候需要重写equals()? 只有当一个实例等于它本身的时候,equals()才会返回true值.通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也可以称做是否实例相 等.而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象.在这样的情况下, 如果超类也没有重写equals()以实现期望的行为,这时我们就需要重写equals方法. 下面看一个简单示例,我们需要一系列的orderElement对象,但是当prop

Java重写equals()和hashCode()

1.何时需要重写equals() 当一个类有自己特有的 ”逻辑相等”概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查 ”实参是否为正确的类型”. [2]对于类中的每一个 ”关键域”,检查实参中的域与当前对象中对应的域值. [2.1]对于非float和double类型的原语类型域,使用==比较: [2.2]对于对象引用域,递归调用equals方法: [2.3]对于float域,使用Float.floatToIntBits(afloat)转换为int