zoukankan      html  css  js  c++  java
  • 重写equals()方法和 hashCode()方法

    java中判断两个对象是否相等的规则:
    首先,判断两个对象的hashCode是否相等 
    如果不相等,认为两个对象也不相等 
    如果相等,则判断两个对象用equals运算是否相等 
    如果不相等,认为两个对象也不相等 
    如果相等,认为两个对象相等 

    我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率。

    equals()相等的两个对象,hashcode()一定相等; 
    equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。

    1,所有Java类都继承自Object类
    2,Object类中有
    public int hashCode(){}
    public boolean equals(Object obj){}
    这两个方法及其他的方法。
    在Object类中,equls()方法和==的本质是相同的,都是判断两个引用是否指向同一对象。
    String类继承自Object类:但String类重写了equals()方法,
    使得:equals()方法的作用是比较两个字符串的内容是否相等;
    ==的作用是比较两个引用是否指向同一个对象;
    很多类都重写了equals方法,供自己产生新的定义。
    3,在本程序中:Items类继承自Object类,并且重写了equals()方法,不按照父类的比较方法来比较两个对象,使得该方法能够按照程序员自己的意愿来比较两个对象

    @Items.java//解决编号没有合并问题
    @Override
    public int hashCode() {
        //若getId和getName相同,则hashCode一定相同
        return this.getId()+this.getName().hashCode();
    }
    
    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        if(this==obj)
        {
            return true;
        }
        if(obj instanceof Items)
        {
            Items i = (Items)obj;
            if(this.getId()==i.getId()&&this.getName().equals(i.getName()))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }                            
  • 相关阅读:
    C# WinForm在高分辨率下界面模糊问题的解决
    C# 上传文件 造成内存溢出 解决方法
    C# Linq 交集、并集、差集、去重
    Linux 命令详解./configure、make、make install 命令
    需求分析的方法(二)
    需求分析的方法(一)
    WinDbG工具实践
    windows server 2008 IIS FTP服务器配置采坑
    网站CPU占满,微信经常SSL不能建立的错误排查
    ABP 数据迁移初始化的坑
  • 原文地址:https://www.cnblogs.com/kkkore/p/5506785.html
Copyright © 2011-2022 走看看