public class test1 {
public static void main(String[] args) {
Object circle1=new Circle();
Object circle2=new Circle();
System.out.println(circle1.equals(circle2));
}
}
class Circle {
public double radius=1;
public boolean equals(Circle circle){
return this.radius==circle.radius;
}
}
则个程序为什么会输出false,书上说在重载Object中equals()的方法时必须把里面的形参声明为Object,这是为什么?不这样做的后果是什么?
public static void main(String[] args) {
Object circle1=new Circle();
Object circle2=new Circle();
System.out.println(circle1.equals(circle2));
}
}
class Circle {
public double radius=1;
public boolean equals(Circle circle){
return this.radius==circle.radius;
}
}
则个程序为什么会输出false,书上说在重载Object中equals()的方法时必须把里面的形参声明为Object,这是为什么?不这样做的后果是什么?
不是同一个实例对象,它们指向的堆中的地址是不同的,所以会输出false、书上说在重载Object中equals()的方法时必须把里面的形参声明为Object
重载Object方法,不就是为了比较对象嘛,参数当然要Object型了
return this.radius==circle.radius;
Object circle1=new Circle();
Object circle2=new Circle();
circle1,circle2是Object型的,
System.out.println(circle1.equals(circle2));
此处的equals不是你重写的,而是Object的equals方法
Circle circle1=new Circle();
Circle circle2=new Circle();
这样就会输出true了