首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-08-01 
关于equals()方法的一个疑问,求解~~~主类public class Test{public static void main(String[]args){Objec

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

热点排行
Bad Request.