class A{
public int hashCode(){
return 60;
}
}
public class HashSetDemo1 {
public static void main(String args[]){
A a1 = new A();
A a2 = new A();
[url=]//day29.A@3c^^^^^^day29.A@3c[/url]:只是对象的内容相等,也就是hashCode,
System.out.println(a1.toString()+"^^^^^^"+a2.toString());
System.out.println(a1==a2);//false--->原因是它们的句柄不相同的。
System.out.println(a1.equals(a2));//
false-->原因是equals()的默认行为比较句柄,你没有在你的类中重写equals();当然就不相等;只有你重写了equals()方法,比较才是内容,而非句柄
public boolean equals(Object obj) {
return (this == obj);//此处比较是句柄
}
}
}作者: 杨志男 时间: 2012-10-22 21:48
equals方法只在一些特定类中才可以直接使用,因为这些类中重写了上帝类Object中的这个方法,改变了它实现的功能,所以它才可以用来比较引用变量的值,而在你定义的类A中并没有重写这个方法,所以它实现的功能还是Object了中的,而这时equals方法比较的就是地址值了,和“==”的效果一样,你定义了两个对象,内存里就会出现两个地址值,所以就都是false作者: 张忠豹 时间: 2012-10-22 23:18
李铁 发表于 2012-10-22 21:44
class A{
public int hashCode(){
return 60;
句柄是个什么东西?求解释!作者: 乔九 时间: 2012-10-22 23:19
class A{
public int hashCode(){
return 60;
}
}
public class HashSetDemo1 {
public static void main(String args[]){
A a1 = new A();
A a2 = new A();
//day29.A@3c^^^^^^day29.A@3c
System.out.println(a1.toString()+"^^^^^^"+a2.toString());
System.out.println(a1==a2);//false此处的a1和a2为不同的对象在堆中的创建位置是不同的所以为false
System.out.println(a1.equals(a2));//false此处比较的为a1和a2所引用的地址值并非他们的内容
}
}作者: 李铁 时间: 2012-10-22 23:25