美文网首页
对象的关联/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