zoukankan      html  css  js  c++  java
  • java类hashcode()、equals()、toString()方法

    java中Object类中都有hashcode()、equals()、toString()这三个方法,因此java中所有的类中都有这三个方法。

    在Object类中toString()方法的实现是打印对象的地址,这个打印出来人类是看不懂的,这个信息打印出来没有什么用处。所以在Effective Java这本书中,作者推荐我们尽量重写这个方法,使其打印出有用的信息。实现toString()方法是一个机械的繁琐的工作,所以我们应该借助成熟的类库来帮忙。java阵营中著名的类库guava可以很好的帮助我们完成这个工作。以下是代码示例:

        @Override
        public String toString() {
    
            return MoreObjects.toStringHelper(this)
                .add("houseNumber", houseNumber)
                .add("street", street)
                .toString();
    
        }

    如果我们设计的类要与hashmap、hashset一起工作,涉及到hash值得操作。那么就需要重写hashcode()、equals()方法,而且这两个方法必须一起重写,如果只写其中的一个会出现难以描绘的错误。而且这两个方法要一致。在java7之前这个工作还是有一定难度的,因为生成高效的hash值是一个困难的工作。所以在java7之前实现这两个方法,最好借助于成熟的类库,比如guava。但是java7之后,java把guava中这两个工具方法加到了标准类库中,因此我们可以直接使用。以下是代码示例:

        @Override
        public boolean equals(Object obj) {
    
            if (obj == null) return false;
            if (obj == this) return true;
            if (!(obj instanceof Address)) return false;
            final Address other = (Address) obj;
            return Objects.equal(this.houseNumber, other.houseNumber)
                && Objects.equal(this.street, other.street)
                && Objects.equal(this.city, other.city)
                && Objects.equal(this.stateOrProvince, other.stateOrProvince)
                && Objects.equal(this.country, other.country);
    
        }
    
        @Override
        public int hashCode() {
    
            return Objects.hashCode(
                this.houseNumber, this.street, this.city, this.stateOrProvince, this.country);
    
        }
    
  • 相关阅读:
    django学习----http协议
    线程进程和协程
    内置函数
    我所了解的递归
    函数的闭包和装饰器
    字符串的内置方法
    格式化输入输出
    逻辑运算符和操作运算符
    python流程控制
    计算机网络原理
  • 原文地址:https://www.cnblogs.com/zheyangsan/p/6880221.html
Copyright © 2011-2022 走看看