equals和hashcode的重写

1重写equals方法

  • 自反性
    对于任何引用,只要其不为null那么对自身使用equals方法将永远返回true(x.equals(x)返回true)。
  • 对称性
  • 传递性
  • 一致性
  • 对于任何非空引用值a和b,用其对null进行equals检查应当始终返回false,也就是说a.equals(null)正反等于false

下面给出实例

package xuming;

class Student {
    String name;
    int age;
    int classNum;
    public Student(){

    }
    public Student( String name, int age, int classNum){
        this.name = name;
        this.age = age;
        this.classNum=classNum;
    }
    //重写equals方法
    public boolean equals (Object o){
        //测试是否指向同一个对象
        if(this==o) {return true;}
        //测试引用o是都为null
        if(o==null) {return false;}
        //测试o指向的对象是都可以看作Student类型
        if(!(o instanceof Student))  {return false;}
        //将引用进行强制类型转换
        Student s = (Student) o;
        //测试相关属性内容
        if(this.name.equals(s.name)
                &&this.age==s.age
                &&this.classNum==s.classNum)
        { 
            return true;}
        else
        {
            return false;
        }
    }
    //重写hashcode方法
    public int hashCode(){
        //return a new hash code ,与成员属性有关
        return 7*this.name.hashCode() + 
                13*Integer.valueOf(this.age).hashCode() +
                17*Integer.valueOf(this.classNum).hashCode();

    }
}
// main class
public class Sampled142{
    public static void main(String[] args){


    Student a1 = new Student("jc",21,1000);
    Student a2 = new Student("jc",21,1000);
    if(a1.equals(a2)){
        System.out.println("学生对象1和2是等价的  其哈希码分别是");
        System.out.println(a1.hashCode()+"and"+a2.hashCode());
        }
    else{
        System.out.println("不等价");

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值