zoukankan      html  css  js  c++  java
  • 重写equals()和hashCode()

    什么时候需要重写equals()?

    只有当一个实例等于它本身的时候,equals()才会返回true值。通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也可以称做是否实例相 等。而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象。在这样的情况下, 如果超类也没有重写equals()以实现期望的行为,这时我们就需要重写equals方法。

    下面看一个简单示例,我们需要一系列的orderElement对象,但是当propertyName已经有的情况下,我们就不在需要,那么其实我们在比较两个对象的时候只需要知道他们的property值是否相等就可以了:

     1 public class OrderElement {
     2 
     3     public OrderElement() {
     4     }
     5 
     6     public OrderElement(Integer orderNo, String propertyName, boolean isAsc) {
     7         this.orderNo = orderNo;
     8         this.propertyName = propertyName;
     9         this.isAsc = isAsc;
    10     }
    11 
    12     private Integer orderNo;
    13     private String propertyName;// 排序属性
    14     private boolean isAsc;// 是否正序
    15 
    16     public Integer getOrderNo() {
    17         return orderNo;
    18     }
    19 
    20     public void setOrderNo(Integer orderNo) {
    21         this.orderNo = orderNo;
    22     }
    23 
    24     public String getPropertyName() {
    25         return this.propertyName;
    26     }
    27 
    28     public void setPropertyName(String propertyName) {
    29         this.propertyName = propertyName;
    30     }
    31 
    32     public boolean getIsAsc() {
    33         return this.isAsc;
    34     }
    35 
    36     public void setAsc(boolean isAsc) {
    37         this.isAsc = isAsc;
    38     }
    39 
    40     @Override
    41     public boolean equals(Object obj) {
    42         if (obj == null || !this.getClass().getName().equals(obj.getClass().getName()))
    43             return false;
    44         OrderElement e = OrderElement.class.cast(obj);
    45         if (getPropertyName() != null && e.getPropertyName() != null && getPropertyName().equals(e.getPropertyName()))
    46             return true;
    47         return super.equals(obj);
    48     }
    49 
    50     @Override
    51     public int hashCode() {
    52         if (getPropertyName() != null) {
    53             return getPropertyName().hashCode();
    54         }
    55         return super.hashCode();
    56     }
    57 }

    这个应用非常常用,有需要的话我们都应该在自己的类中重写这两个方法!

  • 相关阅读:
    elasticsearch restful api 关于PUT与POST
    elasticsearch关于 PUT /index/type/id
    Windows性能计数器相关基础(一)
    打了断点但VS2010断点无效
    使程序以管理员权限运行(C++)
    CListCtrl控件使用方法总结 --很详细(一)
    AdjustTokenPrivileges(进程权限)
    四种方法实现VC枚举系统当前进程
    MFC个人笔记--创建属性表,并通过文件操作,保存属性表中用户的选择 的步骤
    学习笔记--MFC在滚动条窗口如何使所图的图形不产生偏移
  • 原文地址:https://www.cnblogs.com/sun-space/p/5878834.html
Copyright © 2011-2022 走看看