美文网首页
第四次作业 重写equals方法

第四次作业 重写equals方法

作者: 钢笔苹果大菠萝笔 | 来源:发表于2018-06-06 14:57 被阅读0次
     @Override
        public boolean equals(Object obj) {
            if(obj==null)return false;
            if(this==obj)return true;
            if(obj instanceof User) {
                TestentityEntity u = (TestentityEntity) obj;
                return this.getId()==u.getId()
                        &&this.getTname().equals(u.getTname())
                        &&this.getTid().equals(u.getTid())
            }
            return false;
        }
    
    1. equals与==的区别。
      == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
      equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

    2. Hashcode的作用。
      hashCode()方法是为任何一个对象生成一个哈希码,相同(逻辑上认为)的对象应该生成相同的哈希码,Java内置的求出的哈希码是基于存储地址的一个映射关系,保证了对象的哈希码的一一对应关系。散列存储,即是根据一个关键字找到对应的对象,存在对应的哈希表里,

    3. 重写equals()方法就必须重写hashCode()
      重写equals()方法就必须重写hashCode()方法主要是针对HashSet和Map集合类型 。集合框架只能存入对象(对象的引用(基本类型数据:自动装箱))。
      在向HashSet集合中存入一个元素时,HashSet会调用该对象(存入对象)的hashCode()方法来得到该对象的hashCode()值,然后根据该hashCode值决定该对象在HashSet中存储的位置。简单的说:HashSet集合判断两个元素相等的标准是:两个对象通过equals()方法比较相等,并且两个对象的HashCode()方法返回值也相等。如果两个元素通过equals()方法比较返回true,但是它们的hashCode()方法返回值不同,HashSet会把它们存储在不同的位置,依然可以添加成功。同样:在Map集合中,例如其子类Hashtable(jdk1.0错误的命名规范),HashMap,存储的数据是key,value对,key,value都是对象,被封装在Map.Entry,即:每个集合元素都是Map.Entry对象。在Map集合中,判断key相等标准也是:两个key通过equals()方法比较返回true,两个key的hashCode的值也必须相等。判断valude是否相等equal()相等即可。
      稍微提一句:
      (1)两个对象,用==比较比较的是地址,需采用equals方法(可根据需求重写)比较。
      (2)重写equals()方法就重写hashCode()方法。
      (3)一般相等的对象都规定有相同的hashCode。
      集合类都重写了toString方法。String类重写了equal和hashCode方法,比较的是值。

    相关文章

      网友评论

          本文标题:第四次作业 重写equals方法

          本文链接:https://www.haomeiwen.com/subject/yqvbsftx.html