对象的关联/toString/equals

对象的关联

  • 定义
    简单的说,一个对象中使用了另一个对象。

  • 示例

class Employee 包含 class MyDate

if(o1 instanceof Employee && o2 instanceof Employee){

            Employee em=(Employee) o1;

            Employee emp=(Employee) o2;

            MyDate md1 = em.getBirthday();

            MyDate md2 = emp.getBirthday();

            if(md1.getYear().equals(md2.getYear())){

                if(md1.getMonth().equals(md2.getMonth())){

                    return md1.getDay().compareTo(md2.getDay());

                }else {

                    return md1.getMonth().compareTo(md2.getMonth());

                }

            }else{

                return md1.getYear().compareTo(md2.getYear());

            }
}

java.lang.Object

  • 定义
    是所有类的父类。若一个类没有显示的继承任何类时,默认 extends java.lang.Object
  • 作用
  1. 既然 Object 是所有类的父类,因此 Object 类中的内容是最具共性的

  2. 既然 Object 是所有类的父类,因此子类可以继承 Object 类中所有的方法

  3. 既然 Object 是所有类的父类,若 Object 类中的方法对于子类不适用,子类也可以重写 Object 类中的方法

to String()

  • 作用:得到字符串表现形式

  • Object 类中的 toString 返回
    getClass.getName() + '@' + Integer.toHexString(hashCode())
    即:得到的是十六进制的hashCode Person@3fab5

  • hashCode
    当new创建对象时,产生唯一的hashCode地址值
    以十六进制表示
    java中实际是没有地址的,地址值是标识对象在内存中的存在

  • 若 Object 类中的 toString() 对于我们来说不适用,我们可以重写。

要得到一个人,即输出p,但是输出结果是hashCode
我们想要的人是有具体属性的,字,年龄等等,才叫“人”。

public String toString(){
   return "姓名:" + name + " 年龄:" + age;
}

equals()

以下是网上截图,说的不错

image.png
image.png
image.png

重写hashCode() 和 equals()

是否问过自己,为什么要重写hashCode() 和 equals()?
确定两个对象是否相同,或者说,控制两个对象的比较

@Data
public class RankingVO {
    private Integer id = 1;
    private BigDecimal num;
    private String nickName;
    private String uuid;
    private Integer ranking;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof RankingVO)) return false;
        RankingVO rankingVO = (RankingVO) o;
        return Objects.equals(nickName, rankingVO.nickName) && Objects.equals(uuid, rankingVO.uuid);
    }

    @Override
    public int hashCode() {
        return Objects.hash(nickName, uuid);
    }
}
public Callable<ResponseEntity<ResponseData>> history(HttpServletRequest request) {
        Callable<ResponseEntity<ResponseData>> result = new Callable<ResponseEntity<ResponseData>>() {
      //参与了分发奖池的排名
      List<RankingVO> inPoolList = poolDetailService.queryByHistory(cycle);
            if (CollectionUtils.isEmpty(inPoolList)) {
                inPoolList = new ArrayList<>();
      }
      //..........

      //当前用户
      RankingVO currentRankingVO = new RankingVO();
      //.........
      //排名:只要nickName, uuid相等的,就视为相同,取其排序过的索引
      Integer i = inPoolList.indexOf(currentRankingVO);
      //.........
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容