美文网首页
对象的关联/toString/equals

对象的关联/toString/equals

作者: Finlay_Li | 来源:发表于2019-03-30 15:45 被阅读0次

    对象的关联

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

    • 示例

    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);
          //.........
    }
    

    相关文章

      网友评论

          本文标题:对象的关联/toString/equals

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