您的位置:首页 > 产品设计 > UI/UE

-两个对象值相同(xequals(y) == true)但却可有不同的hash code这句话应该是对的吧

2012-05-19 22:46 387 查看
答:对的,相等性比较和hashCode的计算依据可以由类的编写者确定

(此题的答案,各个论坛上五花八门,我做了以下三个测试,说明很多问题)

一://hashCode相同 .equals返回false

public class TestEqual {

public static void main(String[] args) {

Person per1 = new Person(3);

Person per2 = new Person(4);

System.out.println(per1.equals(per2));

//hashCode相同 per1.equals(per2)返回false

}

}

class Person{

public int age;

public Person(int age) {

this.age = age;

}

public Person() {

}

public boolean equals(Object arg0) {

return false;

}

@Override

public int hashCode() {

return 4;

}

}

//以上返回false

二://hashCode值是不同的,equals返回true

public class TestEqual {

public static void main(String[] args) {

Person per1 = new Person(3);

Person per2 = new Person(4);

System.out.println(per1.equals(per2));

//hashCode值是不同的,per1.equals(per2)返回true

}

}

class Person{

public int age;

public Person(int age) {

this.age = age;

}

public Person() {

}

public boolean equals(Object arg0) {

return true;

}

@Override

public int hashCode() {

Random ran = new Random();

return ran.nextInt();

}

}

//以上返回true

三://相同的对象,equals返回false。

public class TestEqual {

public static void main(String[] args) {

Person per1 = new Person(3);

Person per2 = per1;

System.out.println(per1.equals(per2));//false

System.out.println(per1.equals(per1));//false

System.out.println(per1==per2);//true

//相同的对象,per1.equals(per2)返回false。

}

}

class Person{

public int age;

public Person(int age) {

this.age = age;

}

public Person() {

}

public boolean equals(Object arg0) {

return false;

}

public int hashCode() {

Random ran = new Random();

return ran.nextInt();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐