ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

重写toString, equals, hashCode方法

2022-06-06 20:00:10  阅读:270  来源: 互联网

标签:return name equals hashCode toString result


8.Object类

Java对象的root

如果一个对象没有extends,那么它就是从Object继承来的。

toString,equals,hashCode都是Object中的public方法。(当然,每个类要有自己的toString, equals, hashCode,需要重写)

8.1 toString方法:

重写toString:

@Override
public String toString() {
        return 字符串;
}

使用toString:如果一个类中定义了该方法,则在调用该类对象时,将会自动调用该类对象的 toString() 方法返回一个字符串,然后使用“System.out.println(对象名)”就可以将返回的字符串内容打印出来。

作用:Implement toString with a useful human-readable representation of the abstract value。(摘自lab2)

eclipse快速重写:右键-->source-->Generate toString()。

8.2 equals

作用:用来比较两个对象的内容是否相同。

String a = "a";
String b = "a";
System.out.println(a.equals(b));    //true
System.out.println(a == b);           //false

要比较自己建的类的两个对象是否相同,要重写equals方法。一个典型例子如下(摘自lab3):

    @Override
    public boolean equals(Object obj) {
        if (this == obj)       //obj和this管理的是同一对象
            return true;
        if (obj == null)       
            return false;
        if (!(obj instanceof Dish))    //obj不是Dish类的对象,也可以使用getclass方法来比较
            return false;
        Dish other = (Dish) obj;      //向下造型
        if (name == null) {        
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
            return false;
        return true;
    }

eclipse快速重写:右键-->source-->Generate hashCode() and equals()。

8.3 hashCode

摘自lab3的一些重写写法:

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(price);  //price是double类
        result = prime * result + (int) (temp ^ (temp >>> 32));
        result = prime * result + ((title == null) ? 0 : title.hashCode());    //title是自己定义的类
        result = prime * result + age;  //age是int类
        result = prime * result + ((name == null) ? 0 : name.hashCode());   //name是字符串
        return result;
    }

发现和eclipse自动生成的hashCode写法不同,这种写法在累加的过程中不断乘31。

标签:return,name,equals,hashCode,toString,result
来源: https://www.cnblogs.com/fan-hanlin/p/16349507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有