当前位置: 代码迷 >> J2SE >> 麻烦帮忙看一个简单的程序!该如何处理
  详细解决方案

麻烦帮忙看一个简单的程序!该如何处理

热度:129   发布时间:2016-04-24 12:35:05.0
麻烦帮忙看一个简单的程序!!!!!!
程序的目的是验证当两个对象equals为true时,他们的hashcode也一样,可是我的程序老是不通过。。
Java code
class Cat{  int age;  String color;  public Cat();  public Cat(int age,String color){    this.age=age;    this.color=color;    }  public boolean equals(Object obj){    if(obj instanceof Cat)      Cat cat=(Cat) obj;    else return false;    if((Cat.color.equals(this.color))&&(Cat.age==this.age)) return true;      else return false;                                   }          } public class TestHash{    public static void main(String args[]){      Cat cat1=new Cat(10,"Red");      Cat cat2=new Cat(10,"Red");      System.out.println(cat1.equals(cat2));      System.out.println(cat1.hashCode());      System.out.println(cat2.hashCode());    } }


------解决方案--------------------
你要重写hashCode方法
------解决方案--------------------
Java code
class Cat {    int age;    String color;    public Cat() {}    public Cat(int age,String color) {        this.age=age;        this.color=color;    }    @Override    public boolean equals(Object obj) {        if (obj == this) {            return true;        }        if(!(obj instanceof Cat))            return false;        Cat cat=(Cat) obj;        if((cat.color.equals(this.color)) && (cat.age==this.age))            return true;        return false;    }    @Override    public int hashCode() {        return 37 * age + color.hashCode();    }    @Override    public String toString() {        return String.format("Cat[age:%d, color:%s]",age,color);    }}public class TestHash {    public static void main(String args[]){        Cat cat1=new Cat(10,"Red");        Cat cat2=new Cat(10,"Red");        System.out.println(cat1);        System.out.println(cat2);        System.out.println(cat1.equals(cat2));        System.out.println(cat1.hashCode());        System.out.println(cat2.hashCode());    }}
------解决方案--------------------
相同的对象的hashCode必须一样,不同的对象的hashCode也可以一样,这是java的一个参考的规范。而且你要想让两个对象equals方法返回true,hashCode要相同那么你就必须重写hashCode,默认的情况下,不同的对象的hashCode的值是不会一样的。
Java code
public void hashCode() {     return String.valueOf(age).hashCode() + color.hashCode();}
  相关解决方案