关于equals()方法的一个疑问,求解~~~
主类public class Test{
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
}
}
当Circle类是
class Circle{
private int x;
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
}
}时,控制台输出true
但是,Circle类为
class Circle{
private int x;
public boolean equals(Circle circle){
return this.x == circle.x;
}
}时,控制台输出false
为什么第二个会输出false,我是初学者,希望大侠相助~~
------解决方案--------------------public boolean equals(Circle circle){
return this.x == circle.x;
}
刚才用myEclipse、debug走了两边才发现这个方法根本不进去。加了个@Override才发现程序报错了。
这个方法只能算作是用户自定义一个和object类同名的方法。实际并不是对object类中equals方法的重写,当使用时会调用object类的equals方法。
第一个,你重写了equals方法 是比较 只要x相等就返回true
第二个,你没重写equals方法 是比较 两个引用是否指向同一对象 , 你new了2次生成两个对象, 当然false
------解决方案--------------------Object circle = new Circle();
Object circle2 = new Circle();
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
}
第一个是: 传入的是object的对象,在equals的时候,来了个强制类型的转换
public boolean equals(Circle circle){
return this.x == circle.x;
}
第二个是: 传入的是 Circle的对象,直接赋值,false的原因就是: 对象的类型不匹配
------解决方案--------------------第一个是重写,覆盖了Object的equals方法,第二个重载Object的方法,所以第二equals用得方法是Object的方法,所以是false了。
------解决方案--------------------Java code
主类public class Test{
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
}
}
当Circle类是
class Circle{
private int x;
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
}
------解决方案--------------------
楼主看明白下面的代码,你就基本明白了,关键点都写好注释了
Java code
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
System.out.println(circle.equals((Circle)circle2)); //强制转换为Circle类型
}
class Circle{
private int x;
//参数是object类型
public boolean equals(Object circle){
return this.x == circle.x;
}
//参数是Circle类型
public boolean equals(Circle circle){
return this.x == ((Circle)circle).x;
}
}