zoukankan      html  css  js  c++  java
  • 重写Object类中的equals方法

    Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类

     1 public class Student {
     2     //姓名、学号、年纪
     3     private String name;
     4     private int sid;
     5     private int age;
     6     
     7     //定义构造方法,给对象初始化
     8     public Student(){
     9         
    10     }
    11     public Student(String name,int sid,int age){
    12         this.name=name;
    13         this.sid=sid;
    14         this.age=age;
    15     }
    16     
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public int getSid() {
    24         return sid;
    25     }
    26     public void setSid(int sid) {
    27         this.sid = sid;
    28     }
    29     public int getAge() {
    30         return age;
    31     }
    32     public void setAge(int age) {
    33         this.age = age;
    34     }
    35

    测试类:

     1 package com.cn.reequlas;
     2 //equals是比较2个对象是否相等,因为stu1和stu2是2个对像,在内在中是存了2个地址,所以不相同,找的是内存地址、
     3 public class TestStudent {
     4     public static void main(String[] args) {
     5         Student stu1=new Student("张三",1,1);
     6         Student stu2=new Student("张三",1,1);
     7                 boolean flag=stu1.equals(stu2);
     8         System.out.println(flag);
     9     }
    10     
    11 }        

    因为对于Object类中的equals方法来讲,它是用来对比,2个对像的在内存中的地址是否相同,很显然,stu1 new了一个新地址,stu2也new了一个新地址,当然不同

    而实际应用中,2个学生都叫张三,学号都一样,因为学号是唯一的,所以他俩就是同一个人来着。那么我们就得重写equals方法,当name和学号一样的时候,就是相同的一个对像咯

    这里有一个知识点:instanceof

    //instanceof是指obj对像属于Student
            if(!(obj instanceof Student))

    添加重写后的equals方法如下:

     1 package com.cn.reequlas;
     2 
     3 public class Student {
     4     //姓名、学号、年纪
     5     private String name;
     6     private int sid;
     7     private int age;
     8     
     9     //定义构造方法,给对象初始化
    10     public Student(){
    11         
    12     }
    13     public Student(String name,int sid,int age){
    14         this.name=name;
    15         this.sid=sid;
    16         this.age=age;
    17     }
    18     
    19     public String getName() {
    20         return name;
    21     }
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25     public int getSid() {
    26         return sid;
    27     }
    28     public void setSid(int sid) {
    29         this.sid = sid;
    30     }
    31     public int getAge() {
    32         return age;
    33     }
    34     public void setAge(int age) {
    35         this.age = age;
    36     }
    37     //重写equlas方法,判断姓名、学号相等,就是同一个学生
    38     //obj是给我们的一个学生对像
    39     //this是我们自己的学生对像equals
    40     
    41     public boolean equals(Object obj){
    42         boolean flag=false;
    43         //判断对像是否相同,基本是不可能的
    44         if(obj==this){
    45             flag=true;
    46         }
    47         //
    48         if(!(obj instanceof Student)){
    49             flag=false;
    50         }else{
    51             Student stu=(Student)obj;
    52             if(stu.name.equals(this.name) && stu.sid==this.sid){
    53                 flag=true;
    54             }
    55         }
    56         System.out.println(flag);
    57         return flag;
    58     }
    59 }

    测试类不变,输出结果就是true

    package com.cn.reequlas;
    //equals是比较2个对象是否相等,因为stu1和stu2是2个对像,在内在中是存了2个地址,所以不相同,找的是内存地址、
    public class TestStudent {
        public static void main(String[] args) {
            Student stu1=new Student("张三",1,1);
            Student stu2=new Student("张三",1,1);
            /*Pet pet=new Pet("张三",1,1);*/
            //使用重写后的equlas方法,第1个if里面,判断对像是否相同,这个(stu1)就是是obj,stu1是this
            /*boolean flag1=stu1.equals(stu1);
            System.out.println(flag1);
            */
            //验证Student类中重写object方法的第2个if,不是同等类型
            /*boolean flag2=stu1.equals(pet);
            System.out.println(flag2);*/
            //验证Student类中重写object方法的第2个if中的else
            /*boolean flag4=stu1.getName().equals(stu2.getName());
            System.out.println(flag4);
    
            boolean flag5=stu1.getSid()==(stu2.getSid());
            System.out.println(flag5);*/
            
            
            boolean flag=stu1.equals(stu2);
            System.out.println(flag);
        }
        
    }
  • 相关阅读:
    软件测试常见概念
    Apollo简介及工作原理
    bug的编写技巧与级别划分
    native与H5优缺点及H5测试
    优惠券测试
    go语言-for循环
    go语言-流程控制--if
    go语言-二进制与位运算
    cookie和session
    AJAX
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/5514335.html
Copyright © 2011-2022 走看看