覆盖问题,为什么结果都是true

码农程序猿的小世界 2016-09-01 06:15:50
public class Circle {
double radius;
public boolean equals (Circle circle){

return this.radius == circle.radius;
}
public static void main(String[] args){
Object circle1 = new Circle();
Object circle2 = new Circle();
System.out.println(circle1.equals(circle1));
}
}

--------------------------------------------------------------------------------------
public class Circle {
double radius;
public boolean equals(Object circle){
return this.radius == ((Circle)circle).radius;

}
public static void main(String[] args){
Object circle1 = new Circle();
Object circle2 = new Circle();
System.out.println(circle1.equals(circle1));
}
}
...全文
370 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
写错了,应该都是circle1.equals(circle2);
sean_0xiao 2016-09-02
  • 打赏
  • 举报
回复
你重写的equals方法有问题,根本就没有达到重写的效果。所以你调用equals时,还是使用的默认的equanls方法,所以上面那段代码返回的是false。下面是equals的重写方法: public boolean equals(Object obj){ if(obj==null){ return false; } if(obj==this){ return true; } if(obj instanceof Circle){ Circle other = (Circle)obj; return other.radius==this.radius; } return false; } 你可以自己看看API,看看equals的默认方法
rendason 2016-09-02
  • 打赏
  • 举报
回复
可能你的疑问是问什么两个对象作比较结果总是true。实际上是因为从Object继承过来的equals方法会比较两个对象是不是同一个对象,而你重新覆写了equals方法,认为当成员变量的值相等两个对象是相同的。
  • 打赏
  • 举报
回复
没毛病
caicheng_toto 2016-09-02
  • 打赏
  • 举报
回复
问题在你重写的equals方法
Miracle1216 2016-09-02
  • 打赏
  • 举报
回复
circle1和circle2的radius都是默认值0,所以相等。 没问题
codingjav 2016-09-01
  • 打赏
  • 举报
回复
具体的看楼上的解释
cdsn13082487212 2016-09-01
  • 打赏
  • 举报
回复
应该是两个对象,不信你可以debug一下,看看对象的地址是不是不是一样的,你没有给radius赋值,应该都是0,这就是与c的区别,c会默认给一个随便的值,c的话应该是不同的.因为是私有变量所以会给0,如果是局部变量应该是null。这种问题你debug一下会很直观的。
xw534 2016-09-01
  • 打赏
  • 举报
回复
你的两个circle都只是创建了一个对象,默认值是一样的
lzl1030152809 2016-09-01
  • 打赏
  • 举报
回复
没有给 radius 赋值,都是默认值,当然相等
  • 打赏
  • 举报
回复
打错了,是你说的那种情况
beahacker 2016-09-01
  • 打赏
  • 举报
回复
你是不是想比较的是circle1.equals(circle2),而不是circle1.equals(circle1)

62,628

社区成员

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

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