日期:2014-05-20  浏览次数:20704 次

关于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;
    }
}