Object类重写问题

爱肥羊 2020-03-02 04:19:15
public class Eas {
private int age;
private int a;

public Eas(int age, int a) {
this.age = age;
this.a = a;
}

public Eas() {
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public int getA() {
return a;
}

public void setA(int a) {
this.a = a;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Eas eas = (Eas) o;
return age == eas.age &&
a == eas.a;
}

@Override
public int hashCode() {
return Objects.hash(age, a);
}
}

自定义的一个Eas类,当运行的时候

package teste;

public class m {
public static void main(String[] args) {
Eas eas = new Eas(12,1);
Eas eas1 = new Eas(12,1);
System.out.println(eas);

System.out.println(eas1);
System.out.println(eas==eas1);




;
}
}

输出结果前两个是一样的,第三个输出是false,请问有人知道为什么前两个输出值是一样的?在类中并没有重写toString方法?那么输出的地址应该是不一样的,第三个==输出false也表明地址不一样是两个对象,请问这里是怎么回事?有大神知道吗?
...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱肥羊 2020-03-02
  • 打赏
  • 举报
回复
各位大佬说的我都看了,我明白==是对对象地址的比较。 首先肯定这两个对象肯定是两个对象,地址值肯定不同!
 System.out.println(eas);
 
 System.out.println(eas1)
但是这两句输出的结果不应该是地址值吗?难道重写hashCode方法会使输出的值变化成其他的值?那这个值是什么呢又?
paullbm 2020-03-02
  • 打赏
  • 举报
回复
因为==是内存地址值的对比!

System.out.println(System.identityHashCode(eas));
System.out.println(System.identityHashCode(eas1));

你打印一下就知道结果了!
心怀啊 2020-03-02
  • 打赏
  • 举报
回复
输出的并不是地址,输出的值与hashcode有关系,详情自己看源码,因为你重写了hashcode方法,所有两个对象的hashcode一样,你取消重写了就可以看到不同的结果了
sotondolphin 2020-03-02
  • 打赏
  • 举报
回复
== 比较的是两个变量是不是指向同一个存在内存里的对象实例,也就是他们两个的内存地址是否一样。如果要比较两个是否逻辑上相同,应该用 equals

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧