equals ,hashCode 重写步骤的详解

// 系统自动生成的对象的唯一编号
// 1. equals 相等的两个对象,hashCode 必须保持一致
// 系统为了提高效率,HashSet 等, 判断两个对象相等的时候,会先比较hashCode
// 如果一致,调用equals 进行比较,如果不一致,就认为不相同,就不再调用equals 方法了(equals 方法比较复杂)
// 重写equals 方法必须重写hashCode ,保证值相等对象,hashCode 也相等。
//
// 2. hashCode 相等的 equals 不一定相等
“`
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// 可以传入任意对象
if (this == obj) // 同一个对象进行比较肯定是相同的
return true;
if (obj == null) // 如果参数为null,肯定不相等
return false;
if (!(obj instanceof People)) // instance 实例化,创建对象
return false; // instanceof 判断 是否是某个类的对象
// 判断 obj(传入的参数) 是否是People 或其子类的对象
// true 是, false 不是

      // 排除所有的错误情况,进行值的比较  
      People other = (People) obj;  // 强制转换为People 类型
      // obj 的编译时类型是Object ,决定了我们写代码的时候能够调用哪些属性和方法
      // 调用不了People 类的name 和 age 属性
      // 通过强制转换,把编译时类型改为People,就可以调用People 的属性和方法了

      // 比较两个对象的属性,是否相等
      // 基本类型使用  == 进行值相等的比较
      if (age != other.age)
          return false;

      // 引用类型使用equals 进行值相等的比较
      if (name == null) {  // 如果名字为空,调用equals 方法会产生空指针异常
          if (other.name != null)
               return false;
      } else if (!name.equals(other.name)) // 取反,不相等的时候返回false
          return false;
      return true;
 }

      // HashSet 相同的元素只会添加一个,靠的是hashCode 和equals 方法
      // 引用类型 == 比较的是地址,equals 默认比较的也是地址
      // 可以重写equals 方法实现值的比较,比如:String

      // 重写 equals 必须重写 hashCode,两者保持一致
      // equals 相等,hashCode 相等,equals 不相等,hashCode 也不相等

      // 重写equals 方法和 hashCode方法后,contains 比较的是值
      System.out.println(list.contains(p2)); // true



      // 重写equals 方法和 hashCode方法后,indexOf进行比较,是值的比较。contains 其实就是return indexOf(o) >= 0;
      // 找到就返回对应的索引,找不到就返回 -1;
      System.out.println(list.indexOf(p2)); // 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值