当前位置: 代码迷 >> J2SE >> 关于equals()步骤的一个疑问,求解~
  详细解决方案

关于equals()步骤的一个疑问,求解~

热度:69   发布时间:2016-04-24 00:33:13.0
关于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;    }}
  相关解决方案