java中判断两个对象是否相等的规则:
首先,判断两个对象的hashCode是否相等 如果不相等,认为两个对象也不相等 如果相等,则判断两个对象用equals运算是否相等 如果不相等,认为两个对象也不相等 如果相等,认为两个对象相等 我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率。equals()相等的两个对象,hashcode()一定相等; equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。1,所有Java类都继承自Object类
2,Object类中有public int hashCode(){}public boolean equals(Object obj){}这两个方法及其他的方法。在Object类中,equls()方法和==的本质是相同的,都是判断两个引用是否指向同一对象。String类继承自Object类:但String类重写了equals()方法,使得:equals()方法的作用是比较两个字符串的内容是否相等;==的作用是比较两个引用是否指向同一个对象;很多类都重写了equals方法,供自己产生新的定义。3,在本程序中:Items类继承自Object类,并且重写了equals()方法,不按照父类的比较方法来比较两个对象,使得该方法能够按照程序员自己的意愿来比较两个对象@Items.java//解决编号没有合并问题@Overridepublic int hashCode() { //若getId和getName相同,则hashCode一定相同 return this.getId()+this.getName().hashCode();}@Overridepublic boolean equals(Object obj) { // TODO Auto-generated method stub if(this==obj) { return true; } if(obj instanceof Items) { Items i = (Items)obj; if(this.getId()==i.getId()&&this.getName().equals(i.getName())) { return true; } else { return false; } } else { return false; }}