重写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