其他分享
首页 > 其他分享> > 重写toString, equals, hashCode方法

重写toString, equals, hashCode方法

作者:互联网

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