public class Person {
private int age;
private String name;
public Person(){
}
public Person(int age,String name){
this.age = age;
this.name = name;
}
public void show(){
System.out.println(age+"\t"+name);
}
public static void main(String[] args) {
System.out.println("hello01");
Person p = new Person();
Person p1 = new Person();
System.out.println(p1.hashCode());
System.out.println(p.hashCode());
System.out.println(p==p1);
System.out.println(p.equals(p1));
System.out.println("-----------分割线--------------");
Person a = new Person(18,"小明");
Person a1 = new Person(18,"小明");
System.out.println(a1.hashCode());
System.out.println(a.hashCode());
System.out.println(a==a1);
System.out.println(a.equals(a1));
}
}
问题1
equals比较的是两个对象的内容我认为应该是一样的,但是结果却是false,这个方法比较的到底是什么?
问题2
hashCode值打印出来后,关闭程序,然后重新打开IDEA运行还是原来的值,每次创建对象不都是随机地址吗?而且对象在用完后不是会被销毁吗?有点蒙了
求解答
问题一:在没有重写equals的类中,equals比较的是地址值,重写了equals才是比较的内容;如果想得到true结果,重写一下equals方法即可。
问题二:hashCode的值不是随机地址值,而是根据内容计算出来的hash值,所以内容一样,hashcode值是一样的。
ps.当然内容不一样也可能出现hsahcode一样的情况。
这两个你应该是记混了
equals比较的是引用数据类型的地址值,new 关键字就是开辟一个新的地址空间
new 出两个对象来就是两个地址值,即使内容一样,用equals方法比较就是false
hashCode方法是把对象存储的数据经过java的算法生成的一串数字,new出来俩个内容相同的对象hashCode值是一样的
在没有重写的情况下是这样的。